2013-07-05 19 views
0

說我有一個person模型,具有name屬性。如何停止Backbone在執行model.save時將計算值發送回服務器?

服務器端,當我創建模型的JSON表示,我包括一個計算值:

name: 'Jack' 
name_backwards: 'kcaJ' # example 

客戶端,當我做backbone_model.save(attributes),它包括在將其發送到該對象name_backwards服務器。這並不理想,因爲它不符合服務器上的實際屬性。

PATCH不是一個選項,因爲我使用的是Rails 3.2。有沒有解決這個問題的方法?

回答

1

對我來說似乎有點奇怪,你的服務器發送的東西不會回覆。我看到兩個選項:

  1. 在控制器中過濾掉傳入的name_backwards
  2. 停止發送name_backwards並讓客戶處理它。

很容易,從params適當部分只是刪除:name_backwards

有一點涉及。首先你會停止將name_backwards添加到JSON中。然後,你可以在添加name_backwards模型的parse

parse: function(response) { 
    response.name_backwards = reverse(response.name); 
    return response; 
} 

一個可靠的方法來扭轉在JavaScript字符串見this answer

那麼你要忽略name_backwards模型的toJSON

toJSON: function() { 
    var o = _(this.attributes).clone(); // This is what the standard toJSON does. 
    delete o.name_backwards; 
    return o; 
} 

然後添加一個serialize方法,當你餵養你的模型,你的模板,而不是使用toJSON

serialize: function() { 
    return _(this.attributes).clone(); 
} 

如果您想要在模型和模板之間建立一致的界面,您可以輕鬆地將serialize修補爲Backbone.Model.prototype

0

覆蓋Backbone.Model子類中的toJSON方法,並僅從this.attributes中選擇規範字段。

+0

未包含在重寫的toJSON中的任何字段似乎都不可用於其他用途。我需要用於顯示目的的計算值,我只是不想在更新中將它們發送回服務器。 – ben

+0

是的,正如@mu指出的那樣,主幹沒有提供獨特的方法,意思是「toJSON for templating」和「toJSON for the API」。您可能需要考慮演示者設計模式,並將模型專注於處理規範數據。但是,骨幹問題經常出現,答案歸結爲「是的,你可以做到這一點,但你必須寫一堆代碼」。 –

相關問題