
Backbone 函式庫
|
209
close: function(){ /* ... */ }
});
需要特別注意的一點,是事件回叫函式中執行環境(context)的變換。Undercore 特
別提供了一個好用的函式來解決這個問題:
_.bindAll( 執行環境 , * 函式名稱 )
(
http://
documentcloud.github.com/underscore/#bindAll
)。這個函式會將執行環境和函式名稱(字
串格式)綁在一起,確保所有你所設定的函式在被叫用時,所處的執行環境會跟你所
設定的一致。這對於事件回叫函式而言特別有用,因為事件回叫函式裡的執行環境通常
會有變動。在前面這段程式碼裡,就是因為用了
_.bindAll()
函式,所以
render()
和
close()
函式每次執行時,所處的執行環境都會和
TodoView
實體的執行環境保持一致。
如果想在模型被清除的同時順便清除檢視器,也可以採取類似的做法。只要將檢視器和
模型的
delete
事件綁好,然後在觸發
delete
事件時移除
el
即可:
var TodoView = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'render', 'remove');
this.model.bind('change', this.render);
this.model.bind('delete', this.remove);
},
remove: function(){ ...