Javascript backbone.js collection.get()未定义

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 () {

我用的是主干网,我收集了7个模型

我想拿一个模型,从集合中取出。但是,我尝试的所有操作都返回未定义的

下面是我如何填充集合的

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
    

    啊,这很有道理,谢谢!