Backbone.js的collection.get()未定义(backbone.js collec

2019-09-19 17:50发布

我使用的骨干,我有一个集合全的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

有没有人有什么想法?

Answer 1:

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) {
        //...
    }
});

在骨干网的新版本,你需要通过reset: true选项来fetch ,如果你想有一个复位事件:

coll.fetch({ reset: true }); // This will now trigger a 'reset' event


文章来源: backbone.js collection.get() undefined