2011-11-06 23 views
2

所以當我保存在後端的模型,我的API發回一個響應告知一切正常,給你JSON格式的一些其他指針如何不使Backbone.js的使用保存響應爲模型屬性

我的問題是骨幹認爲我想使用該響應作爲我的模型的屬性,並自動將它們轉儲到模型屬性中。

我剛將其保存在前端,並且不想再保存attributs。

回答

4

這就是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。

+0

是什麼,我需要做的更準確的,我確實在\t解析線東西:功能(RESP,XHR){ \t \t如果(resp.type &&(resp.type == 「創造」 | | resp。類型== 「更新」)){ \t \t \t \t}其他{ \t \t \t回報RESP; \t \t} }, –

+2

我剛剛碰到過這個。從Backbone 1.0.0開始,如果您通過'{parse:false}'作爲save方法的第二個參數,那麼服務器響應不會被視爲新的屬性。請參閱http://documentcloud.github.io/backbone/docs/backbone.html#section-61。 –

0

事實上,這是默認行爲,如果你想改變它,你必須重寫一些Backbone函數。

看看如何實現save,您有兩種選擇 - 覆蓋您的型號的save或覆蓋parse,以使其知道您要發送的數據。或者,你可以放棄在響應中發送'指針',因爲空響應意味着模型在保存後不會改變。

0

我有你遇到的確切問題。 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「超類」中。

相關問題