我是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});
,但它表示未定义。有人可以解释我为什么,或者我做错了什么?
答案 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({....});
当然......我只是猜测你要做什么。