Mam następujący kod:Backbone to zamieszanie
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);
}
});
mój problem jest wewnątrz funkcji appendItem
. Gdy używam this
wewnątrz funkcji appendItem
, wierzę, że uważa, że this
odnosi się do this.collection
aniżeli GoalPanelView
. Jak uzyskać this
, aby odnieść się do GoalPanelView
, a nie do collection
? Próbowałem przekazać kolejną zmienną do funkcji, która zawierała zawartość this.elem
, ale wydawało się, że nie działa.
Jedną rzeczą, która pracowała kiedy przeniosłem funkcję appendItem
do collection
i zmienił inicjalizacji wiązać się this.collection.bind('add', appendItem);
ale nie chcę umieścić view
rzeczy do logiki collection
.
Alternatywą jest umieszczenie '_.bindAll (this)' w funkcji initialize. Zapewnia to, że każda funkcja wywołana wewnątrz obiektu zostanie zastosowana z wartością "this" związaną poprawnie z samym obiektem. Przydatne, jeśli piszesz dużo wywołań zwrotnych. – rybosome