backbone.js 2级挑战5个codechool答案

时间:2013-07-28 16:29:00

标签: backbone.js backbone-views backbone-model

codeschool的backbone.js教程中的一个例子有以下解决方案:

的application.js

var appointment = new Appointment({id: 1});

appointment.on('change',function() {
  alert('its changed');
});

我意识到这可能是一个简化的例子,但在大多数情况下你不希望在模型定义中定义这个,所以它适用于所有模型实例吗?

模型定义中的某些内容表明,当我的实例在视图中更改此方法时?然后,该视图方法可以触发警报。

我显然只是在学习,所以感谢任何帮助!

1 个答案:

答案 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();