Javascript backbone.js collection.get()未定义
我用的是主干网,我收集了7个模型 我想拿一个模型,从集合中取出。但是,我尝试的所有操作都返回未定义的Javascript backbone.js collection.get()未定义,javascript,collections,backbone.js,Javascript,Collections,Backbone.js,我用的是主干网,我收集了7个模型 我想拿一个模型,从集合中取出。但是,我尝试的所有操作都返回未定义的 下面是我如何填充集合的 var coll = new TestCollection(); coll.fetch(); 一个简单的控制台日志调用显示集合是从JSON文件填充的 child _byCid: Object _byId: Object _onModelEvent: function () { [native code] } _removeReference: function () {
下面是我如何填充集合的
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)
,但每个方法都返回未定义的
有人有什么想法吗?该方法是一个AJAX调用,这意味着它是异步的。您的console.log
调用将一个实时引用放入控制台(因此它有点异步),因此您将以以下事件序列结束:
您可以调用coll.fetch()
主干发送一个$.ajax
调用
您调用console.log(coll)
,控制台中会出现一个实时引用
您调用coll.at(1)
或coll.get(1)
但什么也得不到,因为2尚未从服务器返回
2从服务器返回并填充您的收藏
然后你去看看控制台,但是现在已经填充了coll
,因此控制台中的coll
参考包括5中返回的型号
混乱
成功触发一个“reset”
事件,因此如果您想知道何时填充集合,则应该侦听该事件:
coll.on('reset', this.some_method);
或者,对于一次性通知,您可以使用success
回调:
coll.fetch({
success: function(collection, response) {
//...
}
});
在较新版本的主干网中,如果需要重置事件,则需要将reset:true
选项传递到fetch
:
coll.fetch({ reset: true }); // This will now trigger a 'reset' event
啊,这很有道理,谢谢!