2012-05-29 30 views
0

我在初始頁面加載時,在我的主幹應用中引導了所有重要數據。這主要是收藏品。我被困在一個問題上,我打電話給collection.get(id),但它返回undefined,儘管我知道一個模型存在傳入ID的ID屬性。使用頁面加載數據引導Backbone集合的正確方法

然後,當我檢查控制檯中的集合時,我注意到_byId陣列應該包含我的模型ID的數組是空的。

您可以從控制檯打印出下面顯示的集合確實有模型,並且這些模型具有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,並且會相應地解釋。

我錯在想這個/我正確地做這件事嗎?

回答

6

我看到你的模型:

ID: 1 

JavaScript是區分大小寫,因此idID是不同的東西; 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不同的屬性:

idAttributemodel.idAttribute

模型的唯一標識符存儲在id屬性下。如果您直接與使用不同唯一密鑰的後端(CouchDB,MongoDB)進行通信,則可以將模型的idAttribute設置爲從該密鑰透明映射到id

描述的第一句話可能是更好的表述爲

模型的唯一標識符下id財產存儲。

避免一些JavaScript對象屬性屬性骨幹模型之間的公共混亂。

例如:

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?' } 
]); 

演示:http://jsfiddle.net/ambiguous/3NhGV/

+0

感謝。史詩般的答案!如果只有我總是得到一個全面的答案。它確實解決了我的問題,我錯誤地認爲骨幹會採取一種常規方法,任何形式的身份證都可以工作,但顯然不是這樣! – jcvandan

相關問題