Angular使用脏检查来捕获数据更改并相应地更改模型或视图。 Ember为每个元素设置观察者来完成这个过程。 但骨干是如何做到的呢?
答案 0 :(得分:1)
Backbone不会处理更新视图的数据更改(默认情况下)。
让我们看看。
Backbone.Model拥有Backbone.Events的所有方法。因此,当数据发生变化时,Model会调用this.trigger()函数。
但是您应该订阅“更改”事件来处理所有数据操作:
myModel.on('change:attributeName', myView.render, myView);
也许最好说Backbone使用setter和Backbone.Events来观察数据变化。
答案 1 :(得分:1)
正如@Leestex所回答的那样,骨干网不会为您绑定数据更改。
但是,最好在视图中使用listenTo。例如:
MyView = Backbone.View.extend({
initialize: function() {
this.listenTo(this.model, 'change', this.render);
}
});
请参阅: http://backbonejs.org/#Events-listenTo
视图监听模型事件的另一种方法是将处理程序附加到模型,如下所示:
this.model.on('change', this.render);
但通常不建议这样做,因为您必须使用off()
手动分离处理程序。当你正在听多个模型时,这可能会变得混乱并可能导致
zombie views。
使用listenTo()
的好处是可以调用stopListening()
,它将取消绑定与该对象关联的回调。在这种情况下,该对象是视图。