backbone.js collection.get() undefined

backbone.js collection.get() undefined

本文关键字:undefined get js collection backbone      更新时间:2023-11-07

我正在使用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

有人有什么想法吗?

fetch方法是一个AJAX调用,这意味着它是异步的。您的console.log调用将一个实时引用放入控制台(因此它有点异步),因此您最终得到以下事件序列:

  1. 您呼叫coll.fetch()
  2. 骨干网发送一个$.ajax呼叫
  3. 您调用console.log(coll),控制台中会出现一个实时引用
  4. 您调用coll.at(1)coll.get(1),但一无所获,因为2尚未从服务器返回
  5. 2从服务器返回并填充集合
  6. 然后查看控制台,但coll现在已经填充,因此控制台中的coll引用包括5中返回的模型
  7. 困惑

成功的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