2012-12-18 11 views
7

Sto cercando di usare template.find per semplificarmi la vita.Meteor template.find is indefinito

Ma nella console JavaScript ottengo: undefined is not a function

Ecco quello che ho. Si sta facendo sgambetto su template.find(...)

Template.superuserHUD.events = 
    { 
    'click input.new_device': function (template) { 
     var id = template.find(".new_device_id").value; 
     Device_IPs.insert({ID: id, IP: "Not Connected"}); 
    } 
    } 

Tutte le idee?

+0

invece di trovare l'elemento che corrisponde al selettore, si dovrebbe recuperare direttamente il valore-testo dell'elemento utilizzando il metodo '.getElementById()' –

+0

Ciao utente1191551, hai posto 5 domande ma non hai accettato alcuna risposta. È considerata cortesia comune qui accettare le risposte che ritieni utili. Migliorerà anche la qualità delle risposte date alle vostre domande future. Grazie! – Rahul

+0

grazie Rahul. Sembra che mi sembra di avere 2 account diversi perché ho sicuramente risposto e accettato più risposte di questo account mostra ... – Chet

risposta

5

utilizzare una seconda arugment prega come

Template.superuserHUD.events 
    'click input.new_device': (event, template) -> 
     options = 
       id: template.find('.new_device_id').value 
       IP: 'Not Connected' 
     Device_IPs.insert options 

e, talvolta, utilizzare la maschera di se stesso come

Template.superuserHUD.events 
    event: (event, template) -> 
     @find('.new_device_id').value 

Ecco la stessa in javascript per il caffè analfabeti ...

Template.superuserHUD.events({ 
    'click input.new_device': function(event, template) { 
    var options; 
    options = { 
     id: template.find('.new_device_id').value, 
     IP: 'Not Connected' 
    }; 
    return Device_IPs.insert(options); 
    } 
}); 

Template.superuserHUD.events({ 
    event: function(event, template) { 
    return this.find('.new_device_id').value; 
    } 
}); 
+0

scusa, ma non ho completamente capito questa sintassi. è questo javascript? Non ho mai visto "->" – Chet

+0

sry è coffeescript, puoi usarlo per tradurre http://js2coffee.org/ – crapthings

15

La funzione del gestore eventi riceve due argomenti: event, un oggetto con informazioni sull'evento e template, un'istanza di modello per il modello in cui è definito il gestore.

Il secondo parametro è facoltativo, ma ha bisogno di essere ricevuto nel gestore quando si desidera utilizzare le funzioni di istanza di template come find(), findAll(), firstNode() e lastNode().

Quindi, per usare il template.find() nel vostro gestore di eventi, è necessario passare sia gli argomenti come:

'click input.new_device': function (event, template) { 
    // your event handling code 
    } 
+0

hmm. Ho provato questo: 'click input.new_device': function (event, template) { var id = this.find (". New_device_id"). Value; console.log (id) } ma ancora non funzionava. ancora non definito ... E questo è l'html: ID: \t Chet

+3

Stai ancora sbagliando, nel ''input input.new_device'' il' this' si riferirà all'attuale oggetto 'window', * non * al' template' con cui stai cercando di lavorare. Quindi, ovviamente 'this.find()' restituirà 'undefined'. Quindi, * devi scrivere * 'template.find()' invece di 'this.find()'. –