所以當我保存在後端的模型,我的API發回一個響應告知一切正常,給你JSON格式的一些其他指針如何不使Backbone.js的使用保存響應爲模型屬性
我的問題是骨幹認爲我想使用該響應作爲我的模型的屬性,並自動將它們轉儲到模型屬性中。
我剛將其保存在前端,並且不想再保存attributs。
所以當我保存在後端的模型,我的API發回一個響應告知一切正常,給你JSON格式的一些其他指針如何不使Backbone.js的使用保存響應爲模型屬性
我的問題是骨幹認爲我想使用該響應作爲我的模型的屬性,並自動將它們轉儲到模型屬性中。
我剛將其保存在前端,並且不想再保存attributs。
這就是Backbone.Model.parse
的用途。默認情況下,它只是一個傳遞,所以你不需要調用「超級」。
比方說,你只關心兩個屬性回來(ID和Foo),你不關心別的:
var myModel = Backbone.Model.extend({
parse : function(resp, xhr) {
return {
id: resp.id,
foo: resp.foo
};
}
});
請注意,我在我的例子包括「ID」。創建(POST)返回一個id屬性非常重要。沒有它,骨幹模型將不知道如何更新/刪除。即使它具有不同的id名稱(如「objectId」),您仍然應該在此函數中設置id。
事實上,這是默認行爲,如果你想改變它,你必須重寫一些Backbone函數。
看看如何實現save
,您有兩種選擇 - 覆蓋您的型號的save
或覆蓋parse
,以使其知道您要發送的數據。或者,你可以放棄在響應中發送'指針',因爲空響應意味着模型在保存後不會改變。
我有你遇到的確切問題。 Backbone是一個非常年輕的框架,並且額外的事實是JavaScript真的是動態的。所以說這裏有一千種解決問題的方法。
我認爲更合適的方式去做這件事是僱用一種叫Mixins的東西。下面是我所做的:
define([
'underscore',
'backbone',
'jquery'
], function (_, Backbone, $) {
return {
parse: function(response, xhr){
var data = response;
if(response.response && response.response.status != 0){
return {};
}
if(response.response && response.response.data)
{
data = _.first(response.response.data);
if(typeof data == 'undefined'){
data={};
}
}
if(_.isFunction(this.postParse)){
return this.postParse.call(this, data);
}
return data;
}
}
});
正如你所看到的,我已經覆蓋了Backbone.Model.parse原型法和我自己的那發生在一個反應過來了。並根據我的服務器規範解析響應。在你的情況下,你可以實現它來理解服務器的響應。
與地面工作閃開,指定模式非常簡單:
var group = Backbone.Model.extend(
_.extend({}, ModelMixin, {
initialize:function() {
}
})
);
return group;
瞧!所有需要編寫的解析方法和檢查都封裝在一個ModelMixin「超類」中。
是什麼,我需要做的更準確的,我確實在\t解析線東西:功能(RESP,XHR){ \t \t如果(resp.type &&(resp.type == 「創造」 | | resp。類型== 「更新」)){ \t \t \t \t}其他{ \t \t \t回報RESP; \t \t} }, –
我剛剛碰到過這個。從Backbone 1.0.0開始,如果您通過'{parse:false}'作爲save方法的第二個參數,那麼服務器響應不會被視爲新的屬性。請參閱http://documentcloud.github.io/backbone/docs/backbone.html#section-61。 –