【发布时间】:2012-08-29 17:29:21
【问题描述】:
我想知道在将add: true 传递给fetch 时是否有任何方法可以获取更改后的模型。它呈现集合中的所有新模型,但我也想知道是否有任何模型发生了变化。
这可能吗?
我还考虑了将不同的函数作为成功处理程序传递给fetch 的可能性,该函数将仅重新呈现视图的某些部分而不是整个视图。
【问题讨论】:
标签: backbone.js
我想知道在将add: true 传递给fetch 时是否有任何方法可以获取更改后的模型。它呈现集合中的所有新模型,但我也想知道是否有任何模型发生了变化。
这可能吗?
我还考虑了将不同的函数作为成功处理程序传递给fetch 的可能性,该函数将仅重新呈现视图的某些部分而不是整个视图。
【问题讨论】:
标签: backbone.js
通常的模式是拥有一个渲染模型的视图。那你:
add 事件,以便附加添加模型的视图。change 以重新渲染。如果您仍然希望只有一个视图,您:
- 订阅集合的add 事件以附加到视图。
- 订阅集合的change 事件并更新部分视图。
【讨论】:
从 0.9.10 版开始,您应该使用 {update:true} 而不是 {add:true}。这将告诉集合为每个已更改的模型触发change 事件。 (请注意,change 事件是在集合而不是模型上触发的)
如果您希望集合添加和更新模型,但不删除它们,您可以这样做:
myCollection.fetch({update:true, remove:false});
Here's the relevant section in the Backbone.js documentation.
【讨论】:
您可以绑定到“添加”事件并触发仅更新部分视图的方法。您必须显式绑定集合事件才能重新呈现您的视图。所以换句话说,你控制应该渲染视图的哪些部分。您能否仅根据集合“更改”事件更改您正在呈现视图的功能?
每个模型都有一个方法isNew()和hasChanged()。您可以循环浏览您的收藏以查看哪些模型已更改。如果有更简单、更熟练的方法来做到这一点,我会全力以赴。
也许您可以发布一些代码,以便我们可以准确地看到您在做什么?
【讨论】:
fetch({add: true}) 时,当前模型没有更新。如果我打电话给fetch而没有add: true,所有的视图都会被重新渲染,我不想要它。
fetch 会触发reset 事件,我无法根据change 事件更改函数
fetch({silent: true}),模型会更新(不重新渲染所有视图),但是这不会触发任何事件。但!我可以这样做并传递一个成功处理程序并触发事件