Ich habe den folgenden Code:Backbone diese Verwirrung
var GoalPanelView = Backbone.View.extend({
// Bind to the goal panel DOM element
el: $("#sidebar-goals"),
// Initialize the collection
initialize: function() {
this.collection = Goals;
this.collection.bind('add', this.appendItem);
},
// Create a new goal when a user presses enter in the enter goal input
createOnEnter: function(e) {
if (e.keyCode != 13) return;
this.addItem();
//Goals.create(this.newAttributes());
},
// Add the goal item to the goal list
addItem: function() {
var goal = new Goal();
goal.set(this.newAttributes());
var goalsElem = this.el;
this.collection.add(goal);
$(this.el).children("#enter-goal").val('');
},
// Append DOM element to the parent el
appendItem: function(item) {
var goalView = new GoalView({
model: item,
});
$(this.elem).append(goalView.render().el);
}
});
Mein Problem ist, innerhalb der appendItem
Funktion. Wenn ich this
innerhalb der appendItem
Funktion verwende, glaube ich, dass es denkt, dass die this
sich auf die this.collection
eher als die GoalPanelView
bezieht. Wie würde ich die this
beziehen sich auf die GoalPanelView
anstelle der collection
? Ich habe versucht, eine andere Variable in die appendItem
Funktion übergeben, die den Inhalt von this.elem
enthielt, aber es schien nicht zu funktionieren.
Eine Sache, die arbeitete, war, als ich die appendItem
Funktion in die collection
bewegte und verändern die Initialisierung this.collection.bind('add', appendItem);
zu binden, aber ich will nicht die view
Sachen in die collection
Logik setzen.
Eine Alternative ist '_.bindAll (this)' in Ihre Initialisierungsfunktion zu setzen. Dies stellt sicher, dass jede Funktion, die innerhalb des Objekts aufgerufen wird, mit dem Wert "this" verknüpft wird, der ordnungsgemäß an das Objekt selbst gebunden ist. Nützlich, wenn Sie viele Rückrufe schreiben. – rybosome