有点像一个JavaScript 新手,阅读了一个骨干网教程http://arturadib.com/hello-backbonejs/docs/5.html并对作者使用的一些代码有一些疑问。
在下面的初始化函数中,作者绑定了
this.model.bind('change', this.render);
this.model.bind('remove', this.unrender);
我假设这意味着render
每当调用更改函数时都会在“this”对象上调用该函数,并且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();
}
});
</p>