当集合被.fetched时,骨干是否会触发.add?

时间:2012-08-05 04:15:29

标签: backbone.js

我正在转换我的骨干应用程序,以便它开始与服务器通信,之前我刚刚使用.add()填充了包含测试数据的集合

我已将一些事件绑定到集合添加事件。因此,每次将项目添加到集合中时,我都可以呈现视图并更新一些统计信息。

看来,只要我添加.fetch()调用以从服务器获取数据,添加事件就会停止。

例如

var PayableCommitmentCollection = Backbone.Collection.extend({
    model:PayableCommitment,
    url:"/cc/account/contributions/",

    initialize: function() {
        this.bind("add",this.setInitialAmount,this);
    }
 }
在fetch在集合中创建模型后,永远不会调用

this.SetInitialAmount()

我还有2个观看正在观看要添加到此集合但尚未更新的项目。

我明显的工作是编写自己的AJAX调用,这样我就可以像开发过程中那样添加项目,但是我确信骨干网能够帮助我解决这个问题。

任何人都可以建议我可以绑定到fetch的完成方式,或者让它激发add事件。

2 个答案:

答案 0 :(得分:6)

fetch 方法接受选项的哈希值。其中一个选项可以是“添加”选项,在集合上调用添加而不是重置

collection.fetch({ add: true });

答案 1 :(得分:5)

来自fine manual

  

抓取 collection.fetch([options])

     

从服务器获取此集合的默认模型集,在集合到达时重置集合。

reset

  

重置 collection.reset(models, [options])

     

一次添加和删除模型一切都很好,但有时您需要更改很多模型,而只是批量更新集合。使用重置将集合替换为新的模型列表(或属性哈希值),最后触发单个"reset"事件。

因此fetch会触发单个"reset"事件而不是一堆"add"个事件。您需要一个可以绑定到setInitialAmount的集合范围"reset"版本。


在Backbone 1.0中,Collection#fetch有这样说:

  

抓取 collection.fetch([options])

     

从服务器获取此集合的默认模型集,在集合到达时将其设置在集合上   [...]
  可以使用可用的set选项自定义获取的行为。例如,要获取集合,为每个新模型获取"add"事件,并为每个已更改的现有模型获取"change"事件,而不删除任何内容:collection.fetch({remove: false})

因此,如果您使用的是1.0+,那么您需要做的只是使用fetch选项调用remove: false