2012-12-18 23 views
7

Ich versuche template.find zu verwenden, um mein Leben einfacher zu machen.Meteor template.find ist undefined

Aber in der JavaScript-Konsole erhalte ich: undefined is not a function

Hier ist, was ich habe. Es wird immer auf 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"}); 
    } 
    } 

Irgendwelche Ideen gestolpert?

+0

anstatt das Element zu finden, die die Wähler übereinstimmt, sollten Sie den Wert direkt Text des Elements abrufen mit '.getElementById()' Methode –

+0

Hallo user1191551, Sie haben 5 Fragen gestellt, aber keine Antworten auf sie akzeptiert. Es wird als allgemeine Höflichkeit angesehen, hier Antworten zu akzeptieren, die Sie nützlich finden. Es verbessert auch die Qualität der Antworten auf Ihre zukünftigen Fragen. Vielen Dank! – Rahul

+0

danke Rahul. Es scheint, dass ich 2 verschiedene Konten habe, weil ich definitiv mehr Antworten beantwortet und akzeptiert habe, als dieser Bericht zeigt ... – Chet

Antwort

5

ein zweites arugment benutzen Sie bitte wie

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

und manchmal Vorlage selbst wie

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

Hier ist das gleiche in Javascript für den Kaffee Analphabeten verwenden ...

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

Entschuldigung, aber ich verstehe diese Syntax nicht. ist das Javascript? Ich habe nie gesehen "->" – Chet

+0

sry es ist coffeescript, Sie können dies zu übersetzen http://js2coffee.org/ – crapthings

15

Die Ereignisbehandlungsfunktion empfängt zwei Argumente: event, ein Objekt mit Informationen zum Ereignis und template, eine Vorlageninstanz für die Vorlage, in der der Handler definiert ist.

Der zweite Parameter ist optional, aber es muss in Handler empfangen werden, wenn Sie Vorlageninstanz Funktionen wie find(), findAll(), firstNode() und lastNode() verwenden möchten.

Also, die template.find() in Ihren Event-Handler zu verwenden, müssen Sie die Argumente sowohl als weitergeben müssen:

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

hmm. Ich habe es versucht: 'click input.new_device': Funktion (Ereignis, Vorlage) { var id = this.find (". New_device_id"). Value; console.log (id) } aber es hat immer noch nicht funktioniert. immer noch undefined ... Und das ist die html: ID: \t Chet

+3

Du machst es immer noch falsch, in dem "click input.new_device" heißt das 'this' das aktuelle' window' Objekt, * not * das 'template' mit dem du zu arbeiten versuchst. Offensichtlich wird 'this.find()' '' undefined' zurückgeben. Also musst du * 'template.find()' anstelle von 'this.find()' schreiben. –