3

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

应用程序.js

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

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

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

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

我显然只是在学习,所以任何帮助表示赞赏!

4

1 回答 1

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

如果您在视图上谈论相同的内容,那么传递给实例的模型通常会继续监听事件。如果有任何变化,那么将调用一个方法来改变视图的状态。

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();
于 2013-07-28T17:56:41.860 回答