我的問題很可能需要一個非常簡單的答案,但我無法輕鬆找到答案。_.bind所有功能
我正在研究的一個Backbone應用程序有幾個視圖。在定義不同視圖時,我在初始化函數中使用_.bindAll將「this」視圖對象與視圖的渲染函數連接起來。例如:
DiscussedItemView = Backbone.View.extend({
...
initialize: function() {
_.bindAll(this, "render");
},
render: function() {
this.$el.attr('id', 'li-meeting-task-' + this.model.getId());
this.$el.html(JST['tasks_sandbox/agenda_task_item']({
taskName : this.model.getName(),
taskId : this.model.getId()
}));
return this;
},
...
});
要創建DiscussedItemView的新實例,我做了以下內容:
...
var discussion_agenda_row = new DiscussedItemView({model: task});
discussion_agenda_row.render();
this.$('#meeting-items-list').append(discussion_agenda_row.$el);
...
的代碼工作正常。不過,我不明白爲什麼需要在discussion_agenda_row上顯式使用render()函數。我認爲新的DiscussedItemView實例的初始化會自動調用渲染函數,但如果我刪除了discussion_agenda_row.render();
行,則HTML將不會顯示。我錯在哪裏?
謝謝 亞歷山德拉
謝謝 - 您的答案很容易遵循。現在我明白了,如果你在初始化函數_.bindAll(this,「render」)中使用,你可以在this.model.on()中省略「this」參數,只寫this.model.on(「改變「,this.render),因爲上下文已經保存。 – Alexandra
是的,你完全可以這樣做,但我寧願在「on」中指定上下文,而不是進行兩個調用。當你這樣做時,你不需要調用bindAll。 –