排序的新手JavaScript人閱讀backbone.js教程http://arturadib.com/hello-backbonejs/docs/5.html並有幾個關於作者使用的代碼的問題。什麼觸發了後面的更改功能
在下面的初始化函數,筆者結合
this.model.bind('change', this.render);
this.model.bind('remove', this.unrender);
我假設這意味着render
函數被調用每當更改功能被稱爲「這個」對象,並unrender
運行時remove
叫做。這個問題,對我來說,是有他的代碼中定義的函數'remove'
,但沒有定義函數'change'
提問:change
和remove
指jQuery的功能或根本的remove
功能是指在規定的remove
功能代碼(即它覆蓋了jquery函數),而change
引用了jquery函數。如果是後者,究竟是什麼觸發'change'
函數,如果它從未明確調用,並因此render
函數?
代碼
var ItemView = Backbone.View.extend({
tagName: 'li', // name of tag to be created
events: {
'click span.swap': 'swap',
'click span.delete': 'remove'
},
initialize: function(){
_.bindAll(this, 'render', 'unrender', 'swap', 'remove'); // every function that uses 'this' as the current object should be in here
this.model.bind('change', this.render);
this.model.bind('remove', this.unrender);
},
render: function(){
$(this.el).html('<span style="color:black;">'+this.model.get('part1')+' '+this.model.get('part2')+'</span> <span class="swap" style="font-family:sans-serif; color:blue; cursor:pointer;">[swap]</span> <span class="delete" style="cursor:pointer; color:red; font-family:sans-serif;">[delete]</span>');
return this; // for chainable calls, like .render().el
},
unrender: function(){
$(this.el).remove();
},
swap: function(){
var swapped = {
part1: this.model.get('part2'),
part2: this.model.get('part1')
};
this.model.set(swapped);
},
remove: function(){
this.model.destroy();
}
});
非常感謝。我現在瞭解更改事件,但是在此代碼中刪除了哪些觸發器?是否顯式調用「移除」,如果不存在,移除會如何觸發? – Leahcim 2012-04-11 05:37:01
@Michael:我沒有看到任何會觸發remove事件的東西,通常來自['Collection#remove'](http://documentcloud.github.com/backbone/#Collection-remove) 。視圖上的remove方法會觸發['destroy'](http://documentcloud.github.com/backbone/#Model-destroy)事件。 – 2012-04-11 05:44:12
所以這條線是微不足道的? this.model.bind('remove',this。unrender);我認爲刪除需要被觸發才能被觸發。 – Leahcim 2012-04-11 06:03:43