首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >backbone.js collection.get()未定义

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

Stack Overflow用户
提问于 2012-07-19 02:43:22
回答 1查看 1.8K关注 0票数 2

我正在使用Backbone,并且我有一个完整的7个型号的集合。

我想从收藏品中拿出一个模型。但是,我尝试的所有内容都返回undefined

下面是我填充该集合的方式

代码语言:javascript
复制
var coll = new TestCollection();
coll.fetch();

一个简单的控制台日志调用显示该集合是从JSON文件填充的

代码语言:javascript
复制
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

有谁有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-19 03:45:53

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

您调用coll.fetch().

  • Backbone的
  1. 将发出$.ajax调用。您调用console.log(coll)
  2. 将在控制台中显示实时引用。由于2尚未从服务器返回yet.
  3. 2,因此
  4. 您调用coll.at(1)coll.get(1)时什么也得不到。从服务器返回并填充您的yet.
  5. 2您可以查看控制台,但d23已填充,因此控制台中的coll引用已填充包括在5.
  6. Confusion.

中返回的模型

成功的fetch会触发"reset"事件,因此如果您想知道何时填充集合,则应该侦听该事件:

代码语言:javascript
复制
coll.on('reset', this.some_method);

或者,对于一次性通知,您可以使用success回调:

代码语言:javascript
复制
coll.fetch({
    success: function(collection, response) {
        //...
    }
});

在较新版本的Backbone中,如果需要重置事件,则需要将reset: true选项传递给fetch

代码语言:javascript
复制
coll.fetch({ reset: true }); // This will now trigger a 'reset' event
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11548222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档