我正在转换我的骨干应用程序,以便它开始与服务器通信,之前我刚刚使用.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事件。
答案 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
。