2013-09-10 40 views
0

我有一個Collection,它指定了一個Model,它本身有一個idAttribute集,因爲我的後端使用主鍵的自定義字段。該代碼是這樣的:無法讓idAttribute在Backbone中工作

var SearchItemModel = Backbone.Model.extend({ 
    idAttribute: 'searchDefId' 
}); 

var savedSearchesCollection = new SavedSearchesCollection({ 
    model: SearchItemModel 
}); 

這是我的理解,我應該能夠找到做that.collection.get(searchDefIdValue)模型,但我不能。在下面,你可以看到我的收藏有兩種模式。如果我試圖根據Backbone的'c44'cid來獲取模型,那麼它可以發現它沒有問題。但是,如果我嘗試在自定義ID字段'searchDefId'上搜索,則無法找到它。我認爲Backbone應該將idAttribute的值複製到id中,但我沒有看到任何'id'字段。

另請注意,我可以使用that.collection.where({ searchDefId: data.searchDefId})[0]找到該模型,但似乎可能會更昂貴。

console output

回答

2

我認爲這個問題是您傳遞options作爲第一個參數SavedSearchesCollectionBackbone.Collection希望它是modelsthat.collection上缺少model財產也證明了這一點。

嘗試

var savedSearchesCollection = new SavedSearchesCollection([], { 
    model: SearchItemModel 
}); 
+2

,通常你會指定'模型:創建'SavedSearchesCollection'而當實例集合時比SearchItemModel'。 –

+0

沒有運氣。我很確定這是一個可選參數。否則,觀點如何運作。 –

+0

@ muistooshort:與Backbone中的大多數事情一樣,您可以在類中指定它,也可以在創建實例時指定它。骨幹文檔本身顯示它是通過兩種方式完成的:http://backbonejs.org/#Collection –