我在初始页面加载时在我的骨干应用程序中引导所有重要数据。这主要是收藏品。在我调用collection.get(id)
的问题上,我已经被困了一段时间,但它返回undefined
,即使我知道存在传递ID的ID
属性的模型。
然后当我在控制台中检查集合时,我注意到应该包含模型ID数组的_byId
数组是空的。
您可以从控制台打印出来,该集合确实有模型,这些模型具有ID属性。
window.campaigns
child
_byCid: Object
_byId: Object
__proto__: Object
_callbacks: Object
length: 32
models: Array[32]
models: Array[32]
0: child
_callbacks: Object
_escapedAttributes: Object
_pending: Object
_previousAttributes: Object
_silent: Object
attributes: Object
DateCreated: "23/05/2012"
DateScheduled: ""
DateSent: ""
Description: null
From: null
ID: 1
IsAllowed: false
Message: null
Name: "Some name"
__proto__: Object
changed: Object
cid: "c0"
collection: child
__proto__: ctor
1: child
2: child
3: child
4: child
5: child
length: 6
__proto__: Array[0]
__proto__: ctor
我使用JSON对象数组引导数据,这些对象在页面加载时写入我的索引页面。我认为这就是你所要做的全部,而Backbone会假设一个名为'ID'的属性是模型的ID,并会相应地解释。
我是否错误地认为这是正确的?
答案 0 :(得分:6)
我在你的模型中看到了这一点:
ID: 1
JavaScript区分大小写,因此id
和ID
是不同的东西; Backbone默认情况下正在寻找id
,并且对ID
一无所知。
如果你使用id
,那么一切都将开箱即用:
var M = Backbone.Model.extend({});
var C = Backbone.Collection.extend({
model: M
});
var c = new C([
{ id: 1, str: 'where' },
{ id: 2, str: 'is' },
{ id: 3, str: 'pancakes' },
{ id: 4, str: 'house?' }
]);
演示:http://jsfiddle.net/ambiguous/nzLEC/
或者您可以使用idAttribute
告诉您的模型使用id
的其他属性:
idAttribute
model.idAttribute
模型的唯一标识符存储在
id
属性下。如果您直接与使用其他唯一键的后端(CouchDB,MongoDB)进行通信,则可以将模型idAttribute
设置为从该键透明地映射到id
。
描述的第一句可能更好地表达为
模型的唯一标识符存储在
id
属性下。
避免JavaScript对象属性与Backbone模型属性之间的一些常见混淆。
例如:
var M = Backbone.Model.extend({
idAttribute: 'ID'
});
var C = Backbone.Collection.extend({
model: M
});
var c = new C([
{ ID: 1, str: 'where' },
{ ID: 2, str: 'is' },
{ ID: 3, str: 'pancakes' },
{ ID: 4, str: 'house?' }
]);