我使用backbone.js并拥有一个没有集合的模型。 在视图中,我使用回调来渲染视图,在模型上调用fetch。backbone.js中的自动更新视图
this.user.fetch({success: function(d) { self.randomUserView.render() }})
如何在模型更改时自动更新视图?例如我不想在每次调用fetch时指定上述回调。我试图将视图绑定到初始化的许多模型事件上,但这并不奏效。
我使用backbone.js并拥有一个没有集合的模型。 在视图中,我使用回调来渲染视图,在模型上调用fetch。backbone.js中的自动更新视图
this.user.fetch({success: function(d) { self.randomUserView.render() }})
如何在模型更改时自动更新视图?例如我不想在每次调用fetch时指定上述回调。我试图将视图绑定到初始化的许多模型事件上,但这并不奏效。
在视图中添加事件处理程序的视图模型:
initialize: function() {
this.model.on('change',this.render,this);
}
骨干是事件驱动的,而不是回调驱动的框架(虽然在技术上它们是回调)。而且你的方法似乎不是原生于Backbone的。当您执行fetch()时,用户模型会自动触发“添加”事件。所有你需要做的是在相应的视图中初始化补充一点:
initialize: function() {
... your code...
this.model.bind('add', this.render);
}
这样您可以在视图初始化订阅这甚至只有一次,没有永远传递明确的回调。
Backbone不是一个框架,它是一个库。 – Fdr
实际上,如果您希望在集合上获取刷新视图,则需要将RESET绑定!
this.model.bind('reset', this.render, this);
只有当编辑当前集合时才会触发更新。
ps bindAll是危险和懒惰的。 (可能会造成问题上下行)
如果你认为这个答案可能如此热情以解释为什么? – sidonaldson
这是不是“变”,或者如果这种模式已经被加载与否取决于“添加”。但通常你使用fetch()来加载新模型,所以你订阅'add'。 –
你可以安全地玩这个游戏,只需要用'this.model.bindAll(this.render)',假设你可以在每个模型事件中渲染视图 – jackwanders