codeschool的backbone.js教程中的一个例子有以下解决方案:
的application.js
var appointment = new Appointment({id: 1});
appointment.on('change',function() {
alert('its changed');
});
我意识到这可能是一个简化的例子,但在大多数情况下你不希望在模型定义中定义这个,所以它适用于所有模型实例吗?
模型定义中的某些内容表明,当我的实例在视图中更改此方法时?然后,该视图方法可以触发警报。
我显然只是在学习,所以感谢任何帮助!
答案 0 :(得分:1)
此处事件附加到该特定模型实例。所以同样不会触发任何其他实例的事件..
var appointment = new Appointment({id: 1}); <--- Event is triggered
var appointment1 = new Appointment({id: 2}); <--- Event is not triggered
appointment.on('change',function() {
console.log('its changed');
});
由于事件直接附加在模型的实例上。但是,如果在定义模型时执行相同操作,则会在模型的所有实例上触发相同的操作。
var Appointment = Backbone.Model.extend({
initialize: function() {
this.on('change', function() {
console.log('its changed')
});
}
});
现在,模型实例的任何更改都会触发事件。
var appointment = new Appointment({id: 1}); <--- Event is triggered
var appointment1 = new Appointment({id: 2}); <--- Event is triggered
如果您在View上谈论相同内容,那么传递给实例的模型通常会继续监听事件。如果有任何更改,则会调用一个方法来更改视图的状态。
var View = Backbone.View.extend({
initialize: function() {
// Listening to the event on the model which when
// triggered will render the view again
this.listenTo(this.model, 'change', this.render);
},
render: function() {
// do something
}
});
var view = new View();
view.render();