2012-06-25 36 views
5

我使用backbone.js并拥有一个没有集合的模型。 在视图中,我使用回调来渲染视图,在模型上调用fetch。backbone.js中的自动更新视图

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

如何在模型更改时自动更新视图?例如我不想在每次调用fetch时指定上述回调。我试图将视图绑定到初始化的许多模型事件上,但这并不奏效。

回答

12

在视图中添加事件处理程序的视图模型:

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

这是不是“变”,或者如果这种模式已经被加载与否取决于“添加”。但通常你使用fetch()来加载新模型,所以你订阅'add'。 –

+1

你可以安全地玩这个游戏,只需要用'this.model.bindAll(this.render)',假设你可以在每个模型事件中渲染视图 – jackwanders

1

骨干是事件驱动的,而不是回调驱动的框架(虽然在技术上它们是回调)。而且你的方法似乎不是原生于Backbone的。当您执行fetch()时,用户模型会自动触发“添加”事件。所有你需要做的是在相应的视图中初始化补充一点:

initialize: function() { 
    ... your code... 
    this.model.bind('add', this.render); 
} 

这样您可以在视图初始化订阅这甚至只有一次,没有永远传递明确的回调。

+0

Backbone不是一个框架,它是一个库。 – Fdr

0

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

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

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

ps bindAll是危险和懒惰的。 (可能会造成问题上下行)

+0

如果你认为这个答案可能如此热情以解释为什么? – sidonaldson