Backbone.js中自动更新视图

5

我使用backbone.js,有一个没有集合的模型。 在视图中,我调用模型上的fetch方法,并带有一个回调函数来渲染视图。

this.user.fetch({success: function(d) { self.randomUserView.render() }})

当模型改变时,如何使视图自动更新?例如,我不想每次调用fetch时都指定上面的回调函数。我尝试在初始化时将视图绑定到许多模型事件,但这并没有起作用。

3个回答

12

在视图上,向视图的模型添加一个事件处理程序:

initialize: function() {
  this.model.on('change',this.render,this);
}

这取决于该模型是否已加载,它可以是“更改”或“添加”。但通常您使用fetch()来加载新模型,因此您订阅“添加”。 - mvbl fst
1
你可以选择保险一点,只使用 this.model.bindAll(this.render),假设他对于在每个模型事件上渲染视图感到满意。 - jackwanders

1
Backbone是事件驱动的框架,而不是回调驱动的框架(尽管从技术上讲它们是回调)。您的方法似乎不是Backbone原生的。当您执行fetch()时,用户模型将自动触发“add”事件。您需要做的就是在相应的视图中添加以下内容:initialize:
initialize: function() {
  ... your code...
  this.model.bind('add', this.render);
}

这样,您只需在视图初始化时订阅一次,就不必再传递显式回调函数。


0

实际上,如果您想在获取集合时刷新视图,则需要绑定RESET!

this.model.bind('reset', this.render, this);

只有在编辑当前集合时才会触发更新。

PS:bindAll 是危险和懒惰的。(而且可能会在以后给你带来问题)


如果您对此回答进行了负评,请问能否友善地解释一下原因呢? - sidonaldson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接