Ich habe Backbone-Ansicht, die eine Aktion an ein Element im DOM bindet. Das Problem ist, dass das DOM-Element beim Aufruf der Ereignisse nicht gerendert wurde. Mein Code sieht wie folgt aus:Wie binden Sie Ereignisse nach der Initialisierungsfunktion im Backbone an das DOM?
// Change the focus to a full goal view
var GoalFullView = Backbone.View.extend({
// Bind the goal full view
el: $("#main"),
// Events for making changes to the goal
events: {
"keypress #goal-update": "createOnEnter",
},
// Cache the template for the goal full view
template: _.template($("#goal-full-template").html()),
// Render the goal full and all of its goal updates
initialize: function() {
this.render();
this.collection = new GoalUpdateList;
this.collection.bind('add', this.addOne, this);
this.collection.bind('reset', this.addAll, this);
this.collection.fetch();
},
Wie Sie sehen können, die Ereignisbindung auftritt, bevor die Initialisierung, damit es nicht das DOM-Element finden kann, weil es nicht erbracht wurde. Wie kann ich die Ereignisbindung bis nach der Initialisierung verzögern?
Edit 1: Hmm, ich habe ein Konsolenprotokoll, und druckt es auf einem Tastendruck etwas aus, aber ich bin immer diese Nachricht in meiner Chrome-Entwicklerkonsole:
Uncaught TypeError: Cannot call method 'apply' of undefined
Was bedeutet das?
binden nur die Ereignisse in der Initialisierungsfunktion. oder verwenden Sie die Delegation. Binden Sie das Ereignis an ein Elternelement und testen Sie im Ereignisrückruf, welches Element das Ereignis ausgelöst hat. – mpm
Ich denke, ich benutze diesen Ansatz die ganze Zeit und ich habe kein Problem .. lass mich überprüfen. – fguillen
Ich erinnere mich nicht Ereignis mit dem Namen "Tastendruck", aber ich erinnere mich an "keyup". könnte das das problem sein? (übrigens, liebe deinen Benutzernamen :) –