我有叫Member
骨幹模型 - 這包含會員資料,如名字,姓氏,電子郵件,電話等,還包括多值字段我需要保持作爲集合 - 這是Degrees
和Affiliations
。如何正確實現在Backbone模型中解析以包含集合?
我在模型中調用fetch()
方法時遇到的問題是,基本數組與我的模型中的集合對象之間存在阻抗不匹配。由於parse
根據定義應該返回一個在set
中使用的散列,而不是實際設置值,所以我不可能以這種方式設置我的集合。例如 - 如果我返回一個Degrees
的JavaScript對象,如下所示:{degrees: [{id: 1, title: "PhD"}]}
,那麼這會將我的degree
集合轉換爲平面數組。這裏是我的代碼:
window.Models.Member = Backbone.Model.extend({
url: '/api/member',
initialize: function() {
_.bindAll(this);
this.set('degrees', new window.Collections.DegreesList());
this.fetch();
},
parse: function(response) {
var setHash = {};
setHash.first_name = response.first_name;
setHash.last_name = response.last_name;
setHash.office_phone = response.office_phone;
// When this is run, this.get('degrees') will now return a flat array rather than a DegreesList collection
setHash.degrees = _(response.degrees).each(function(item) {
return {id: item.id, title: item.title}
});
return setHash;
}
});
我可以手動設置我的解析函數的集合,但是,似乎是它顛覆主幹路,哈克。
編輯:我已經暫時通過以下操作解決了這個問題:
parse: function(response) {
var setHash = {};
setHash.first_name = response.first_name;
setHash.last_name = response.last_name;
setHash.office_phone = response.office_phone;
this.get('degrees').reset(response.degrees);
return setHash;
}
我懷疑這是最佳的解決方案,但它肯定適用於現在。我願意提供更好的建議。
試試這個:溝'解析:'函數(它不似乎並不需要),而是在'initialize:'中手動將'degrees'屬性從數組轉換爲Backbone集合... – 2012-02-29 00:40:52
'fetch'方法返回後''parse'會自動調用。在調用fetch之後,我可以手動將'degrees'屬性重置回集合,但是我不會在該集合中包含任何我想要的數據...並且數據正在進入。 – rybosome 2012-02-29 03:15:56
您將擁有如果手動將它們添加到'parse'中,可以使用'度數'來做很多事情。去@ŠimeVidas的建議,併爲他們使用Backbone集合。它讓你處理每個'度'的骨幹方式。 – sntran 2012-03-01 03:13:12