未定义的集合

时间:2013-11-05 04:49:42

标签: javascript backbone.js requirejs

我是Javascript和Backbone的新手,也许这是一个愚蠢的问题。我有这个收藏

define(['backbone', 'models/profile'], function(Backbone, Profile) {

  // Collection definition
  var Profiles = Backbone.Collection.extend({
    url: '/profile',
    model: Profile,
    //localStorage: new Backbone.LocalStorage('Profiles'),

    initialize: function() {    
        this.fetch();

        if (this.isEmpty() || !this.where({is_guest: true}))
            this.create({name: 'Guest', is_guest: true, has_pin: false});
     }
  });

  return Profiles;

});

我想从Chrome控制台向此系列添加项目,我试过了 collection.create({name: 'Guest', is_guest: true, has_pin: false});Profiles.create({name: 'Guest', is_guest: true, has_pin: false});,但它表示未定义。有人可以解释我为什么,或者我做错了什么?

3 个答案:

答案 0 :(得分:0)

在浏览器中使用此方法检查上下文,并检查收集对象是否在范围内。只需在控制台中键入集合将无法正常工作或者提供更多细节。

答案 1 :(得分:0)

对我来说听起来像一个范围问题,因为代码看起来很好(你在构造函数中异步调用fetch(),所以你的isEmpty()可能会失败......但这是一个不同的问题) 。您正在使用AMD / Require.js,因此请提供将此集合作为依赖项加载的模块的代码。

答案 2 :(得分:0)

不要忘记Profiles仅在您上面的文件范围内,您无法从外部访问它。由于您使用的是Profiles.create({...,我假设您尚未初始化该集合。

只是一个提示:

文件1:您上面的收藏

文件2:

define(['collections/my_collection_from_above'], function(MyCollectionFromAbove) {
    var myCollection = new MyCollectionFromAbove();
    myCollection.create({....});
}); 

或其他案件:

var MyCollectionFromAbove = require('collections/my_collection_from_above');
var myCollection = new MyCollectionFromAbove();
myCollection.create({....});

当然......我只是猜测你要做什么。