我有一個鏈接到兩個子型號,像這樣一個模型:Backbone.js的 - 重寫解析()不設置模型屬性
var SubModel = Backbone.Model.extend({
defaults: {
headline: null,
image_url: null,
url: null
}
});
var MainModel = Backbone.Model.extend({
defaults: {
subModelA: null,
subModelB: null,
title: null
},
urlRoot: function() {
if (this.isNew()) {
return '/mainmodel/new';
}
return '/mainmodel';
},
initialize: function() {
this.fetch();
},
parse: function(data) {
var response = {};
response.subModelA = new SubModel(data.subModelA);
response.subModelB = new SubModel(data.subModelB);
response.title = data.title;
return response;
}
});
我目前遇到的問題是,調用var mainModelInstance = new MainModel()
不正確取自/mainmodel/new
,但mainModelInstance.attributes
始終是空白對象{}
。
var mainModelInstance = new MainModel();
mainModelInstance.attributes; // Returns {}
這裏是服務器的響應來/mainmodel/new
樣本:
{
"title": "Politics",
"subModelA": {
"headline": "Investigators: Iran tried to smuggle suicide belts, missiles by boat into Yemen",
"url": "http://dailycaller.com/2013/02/09/yemen-minister-says-weapons-came-from-iran/",
"image_url": "http://cdn01.dailycaller.com/wp-content/uploads/2013/02/54c7d52e1a384db489ab9ea568afddb0-e1360455589316.jpg"
},
"subModelB": {
"headline": "Review: Who needs Windows RT? Acer's Iconia W510 runs the real thing",
"url": "http://arstechnica.com/gadgets/2013/02/review-who-needs-windows-rt-acers-iconia-w510-runs-the-real-thing/",
"image_url": "http://cdn.arstechnica.net/wp-content/uploads/2013/02/w510-main-640x388.jpg"
}
}
它好像模型的屬性不被通過parse
更新。爲什麼不更新模型的屬性?
不知道您的問題的確切答案,但是2個快速註釋:小心像MainModel的'subModelA'和'subModelB'這樣的模型實例屬性與模型數據屬性不同,所以試圖通過解析來建立它們不會設置它們直接作爲instan ce屬性,只是屬性哈希。此外,就REST約定而言,您的代碼很奇怪。您應該通過model.save創建新模型,而不是通過POST獲取並且不通過GET。 – 2013-02-10 04:54:46
到目前爲止,我猜,你需要從parse()方法返回json。不要在那裏做任何事情。 – HungryCoder 2013-02-10 04:54:47
@PeterLyons這不是一個典型的REST場景。沒有初始狀態的'MainModel'由默認值填充,並且沒有等效的CREATE,UPDATE或DELETE方案。這個模型會有一個自定義的方法,可以有效地記錄'subModelA'或'subModelB'之間的選擇。 'MainModel'代表了各種各樣的'匹配'。 – 2013-02-10 05:13:59