Aşağıdaki kod var:Backbone bu karışıklık
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);
}
});
Benim sorunum appendItem
fonksiyonunun içindedir. appendItem
işlevinin içinde this
kullandığımda, this
öğesinin GoalPanelView
yerine this.collection
olduğunu düşündüğüne inanıyorum. this
'u yerine GoalPanelView
'a başvurmak için nasıl alabilirim? Başka bir değişkeni, this.elem
içeriğini tutan appendItem
işlevine geçirmeyi denedim, ancak işe yaramadı. Ben collection
içine appendItem
fonksiyonunu taşındı ve this.collection.bind('add', appendItem);
bağlanma başlatma değiştiği çalıştı
bir şey ama collection
mantığı içine view
şeyler koymak istemiyoruz. aynen böyle bir olay işleyicisi bağlama yaparken
Bir alternatif, '_.bindAll (this)' işlevini başlatma işlevinize koyuyor. Bu, nesne içinde çağrılan herhangi bir işlevin, nesnenin kendisine uygun şekilde bağlı olan "bu" değeriyle uygulanmasını sağlar. Çok sayıda geri arama yazıyorsanız kullanışlıdır. – rybosome