我正在使用Backbone,我有一个完整的7个模型的集合。
我想抓住一个模型并将其从集合中拉出来。但是,我尝试的所有内容都会返回undefined
。
以下是我如何填充集合
var coll = new TestCollection();
coll.fetch();
一个简单的控制台日志调用显示该集合是从JSON文件
填充的child
_byCid: Object
_byId: Object
_onModelEvent: function () { [native code] }
_removeReference: function () { [native code] }
length: 7
models: Array[7]
__proto__: ctor
但是我尝试了一大堆方法,以便从包含coll.at(1)
和coll.get(1)
的集合中获取其中一个模型,但每个模型都返回undefined
。
有没有人有任何想法?
答案 0 :(得分:5)
fetch
方法是一个AJAX调用,这意味着它是异步的。您的console.log
调用会将实时引用放入控制台(因此它有点异步),因此您最终会遇到以下事件:
coll.fetch()
。$.ajax
来电。console.log(coll)
并在控制台中输入实时参考。coll.at(1)
或coll.get(1)
并且一无所获,因为 2 尚未从服务器返回。coll
,因此控制台中的coll
引用包含以 5 返回的模型。成功fetch
会触发"reset"
事件,因此如果您想知道何时填充该集合,您应该收听该事件:
coll.on('reset', this.some_method);
或者,对于一次性通知,您可以使用success
回调:
coll.fetch({
success: function(collection, response) {
//...
}
});
在较新版本的Backbone中,如果您想要重置事件,则需要将reset: true
选项传递给fetch
:
coll.fetch({ reset: true }); // This will now trigger a 'reset' event