开始学习Backbone JS。阅读Codeschool文档。我只是不明白为什么我们需要在初始化时声明this.model.on('....')
,而不是仅在'this.render();'
函数中使用toggleStatus
。请有人给我解释清楚。
以下是我从文档中复制粘贴的代码:
之前:
var TodoView = Backbone.View.extend({
events: {
'change input': 'toggleStatus'
},
toggleStatus: function(){
this.model.toggleStatus();
this.render(); //Doesn’t work for other model changes , WHY IT DOESN'T WORK??
},
render: function(){
this.$el.html(this.template(this.model.toJSON()));
}
}
});
后:
var TodoView = Backbone.View.extend({
events: {
'change input': 'toggleStatus'
},
initialize: function(){
this.model.on('change', this.render, this);
},
toggleStatus: function(){
this.model.toggleStatus();
},
render: function(){
this.$el.html(this.template(this.model.toJSON()));
}
});
答案 0 :(得分:0)
我还没看过文章
首先,为什么this.render
不能用于其他模型更改只是因为在toggleStatus
代码中调用Before
时,只有时间输入更改事件才会触发
所以流程就像......
用户更改输入字段值。
this.events
收到该活动并致电toggleStatus
,然后在this.render
toggleStatus
醇>
在After
代码中,您正在调用model.on
,这是一个为模型事件设置侦听器的函数,toggleStatus
被设置为它的回调函数。
所以,流程将是......
1.无论模型何时更改,model.on
都会获取事件并调用回调函数this.render
。
这意味着当模型属性得到任何更改时,this.render
会被调用。而change input
调用toggleStatus
会对模型进行更改(我不知道因为你没有& #39; t输入它的代码,但我几乎可以确定它,输入更改最终调用this.render
(并且任何其他模型属性更改也调用this.render)
AYI,我认为这些文章有点陈旧,因为model.on
不适合再使用,而是更好地使用listenTo
代替。因为model.on
很难取消绑定事件而且它会让僵尸变得僵尸轻松查看。