2013-05-31 72 views
0

爲了讓Ember集中注意力並儘量減少數據傳輸,我在某些模型上「緩存」了一些屬性。例如:因爲我只需要一個作者的名字,我把它緩存書:如何省略餘燼中的屬性

在Rails:書HAS_ONE:作者 在餘燼:書AUTHOR_NAME:DS.attr(「串」)

所以在Rails中,我計算author_name並使用json數據發送它。

現在,如果我嘗試發送數據回服務器,我需要省略緩存的屬性。

我試圖在Book模型中覆蓋「序列化」,但沒有任何效果(這讓我感到奇怪和不合邏輯)。

最終我重寫了我的適配器中的addAttribute。所以我現在使用:

adapter: DS.RESTAdapter.extend 
    serializer: DS.RESTSerializer.extend 
    addAttribute: (hash, key, value)-> 
     cached_keys = [ "author_name", "more" ] 
     this._super(hash, key, value) unless cached_keys.contains(key) 

但現在屬性沒有鏈接到「書」了。更重要的是,我在其他模型上有更多的緩存屬性,但在這裏它們都混合在一起。我無法想象這是解決問題的最好方法。任何更好的想法?

+0

我會用標籤'燼-data'這個問題。 – mehulkar

+1

@MehulKar我已經添加了餘燼數據,謝謝 –

回答

0

我不是最新的主人,但我覆蓋addAttributes而不是addAttribute。在裏面我設置了一個switch語句來使用record.constructor來序列化或不序列化值。

例子:

App.Serializer = DS.RESTSerializer.extend 
    addAttributes: (data, record) -> 
    switch record.constructor 
     when App.Post 
     record.eachAttribute (name, attribute) => 
      @_addAttribute(data, record, name, attribute.type) if name != "created_at" 
     else 
     @_super(data,record) 
+0

感謝您的回答。我會盡快嘗試。它當然看起來更好。 Ember不使用帖子序列化方法有什麼原因嗎? (或者甚至爲什麼你不在你的第五行上:record.serialize + override在post類中的serialize)。 –

+0

這是一個很好的問題,我不確定。看起來像'DS.Model'有一個'serialize'函數,它基本上調用DS.Store的序列化函數,它調用適配器,它調用序列化器,最終在這裏登陸。不知道鏈條開始在哪裏/如何。 – mehulkar

相關問題