Rückgrat benutzerdefinierte Ereignis auslösen, nicht erkannt wird?
Ich bin lernen Backbone.js für das erste mal und ich bin mit einem Problem zu versuchen, um ein benutzerdefiniertes Ereignis auslösen (oder aus der Sicht von Anerkennung, wenn es ausgelöst wurde)?
Können Sie sehen, meine Sammlung hier den code: https://github.com/Integralist/Backbone-Playground/blob/master/Assets/Scripts/App/main.js#L72-86 welche, wenn Sie initialisiert wird eine benutzerdefinierte collection:init
Veranstaltung.
var Contacts = Backbone.Collection.extend({
model: Contact,
initialize: function(){
this.trigger('collection:init');
this.bind('add', this.model_added, this);
},
model_added: function(){
console.log('A new model has been created so trigger an event for the View to update the <select> menu');
}
});
Aber später in meinem View, wo ich hören werde die für das Ereignis komme ich nicht an die Funktion populate
Feuer: https://github.com/Integralist/Backbone-Playground/blob/master/Assets/Scripts/App/main.js#L90-107
var ContactsView = Backbone.View.extend({
initialize: function(){
console.log(contacts.models, 'get initial model data and populate the select menu?');
},
events: {
'collection:init': 'populate',
'change select': 'displaySelected'
},
populate: function(){
console.log('populate the <select> with initial Model data');
},
displaySelected: function (event) {
console.log('get model data and display selected user', event);
}
});
Irgendwelche Ideen was ich falsch mache?
- Hallo hat die Ansicht erhalten, die Sammlung durch Konstruktor ? während der initialize-Methode in der Ansicht haben, die Sie abonniert das Ereignis wie dieses
this.collection.on("init",this.populate)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Ereignisse hash in einer view verwendet werden, zum binden von events aus dem DOM, um Ihre anzeigen, z.B. Ereignisse, die durch die Elemente in der gerenderten Ansicht. Zu hören auf Ereignisse, die durch Ihre Sammlung, die Sie haben, um Sie manuell:
Beachten Sie, dass Sie eine Globale variable Kontakte, ich würde Ihnen raten, zu verwenden Rückgrat Mechanismen und übergeben Ihre Sammlung, um den Konstruktor, wie Sie mit dem el:
Als @mu-sagte in den Kommentaren, wie es ist, und Ihre Veranstaltung wird nicht alles tun, da Sie Sie auslösen, in der initialize-Methode der Erhebung, die automatisch aufgerufen wird, indem Sie den Konstruktor der collection daher, bevor Sie sich binden können, nichts in der Ansicht. Sehen Sie, diese Geige zu visualisieren die Reihenfolge : http://jsfiddle.net/yRuCN/
Trigger es an anderer Stelle, oder, wenn ich das richtig gelesen habe, Ihre Absicht, die Sie (wahrscheinlich) wollen, verwenden Sie die eingebaute reset-Ereignis:
Sehen http://jsfiddle.net/yRuCN/1/ für ein Beispiel mit Potenzial verwendet.
this.collection.on("collection:init",this.populate,this);
noch ein problem, Nein? Die Sammlung wird immer initialisiert werden (und"collection:init"
ausgelöst), bevor Sie etwas binden können, um das event.model_added
sollte wohl richtig auf die Ansicht.