【问题标题】:Backbone.js: fetch({add: true}), trigger change event?Backbone.js: fetch({add: true}),触发更改事件?
【发布时间】:2012-08-29 17:29:21
【问题描述】:

我想知道在将add: true 传递给fetch 时是否有任何方法可以获取更改后的模型。它呈现集合中的所有新模型,但我也想知道是否有任何模型发生了变化。

这可能吗?

我还考虑了将不同的函数作为成功处理程序传递给fetch 的可能性,该函数将仅重新呈现视图的某些部分而不是整个视图。

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

    通常的模式是拥有一个渲染模型的视图。那你:

    • 在集合的视图中订阅集合的add 事件,以便附加添加模型的视图。
    • 让您的模型视图订阅模型的change 以重新渲染。

    如果您仍然希望只有一个视图,您: - 订阅集合的add 事件以附加到视图。 - 订阅集合的change 事件并更新部分视图。

    【讨论】:

    • 我决定使用集合视图和模型视图。这个问题并不是你真正回答的那个问题。我知道变化事件。我举个例子:一个团队项目管理应用程序,我加载任务的视图,然后你更改一个任务的细节。现在,我想更新已经渲染的视图(在这种情况下谈论任务名称)。如果我获取并传递 add: true,则只会显示新任务,它也不会触发更改事件。我认为可行的另一种方法是在 fetch 的成功处理程序中触发一个事件,该事件的参数为静默:true
    • 在我的示例中, 为每个模型触发一个事件并使用 jQuery 更新任务名称。因此,已经渲染的视图也保持更新。你怎么看?
    • 获取后,更改事件触发更新的模型。为什么要触发另一个?可能我没有理解正确……
    • 您没有正确理解。我想调用 fetch({add: true})。因为我不希望重新渲染所有视图。使用 add: true 调用它不会触发更改事件。我将获得新模型,但不会更新当前模型。
    • 所以我想要一种方法来获取新模型并更新当前模型,而无需重新渲染所有内容
    【解决方案2】:

    从 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.

    【讨论】:

      【解决方案3】:

      您可以绑定到“添加”事件并触发仅更新部分视图的方法。您必须显式绑定集合事件才能重新呈现您的视图。所以换句话说,你控制应该渲染视图的哪些部分。您能否仅根据集合“更改”事件更改您正在呈现视图的功能?

      每个模型都有一个方法isNew()和hasChanged()。您可以循环浏览您的收藏以查看哪些模型已更改。如果有更简单、更熟练的方法来做到这一点,我会全力以赴。

      也许您可以发布一些代码,以便我们可以准确地看到您在做什么?

      【讨论】:

      • 唯一的问题是在调用fetch({add: true}) 时,当前模型没有更新。如果我打电话给fetch而没有add: true,所有的视图都会被重新渲染,我不想要它。
      • 如果我调用fetch 会触发reset 事件,我无法根据change 事件更改函数
      • 可以发布一些代码,其中包含您的集合中的数据示例以及从服务器获取的数据。
      • 如果我调用fetch({silent: true}),模型会更新(不重新渲染所有视图),但是这不会触发任何事件。但!我可以这样做并传递一个成功处理程序并触发事件
      • 绑定到“add”事件会发生什么?我猜它没有被解雇,因为你说收藏保持不变。您确定您从服务器获取的数据不存在于集合中或具有冲突的 ID?
      猜你喜欢
      • 2014-01-03
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多