2017-07-05 77 views
1

我認爲這個話題在stackoverflow之前討論過,但沒有與最新版本的ember數據討論。至少我發現的所有建議都不適合我。Ember:編輯沒有設置isdirty的模型對象

我使用最新版本的Ember和Ember數據(versjon 2.13.0)。我使用JsonApiAdapter。

方案

後,我從加載我想要做它的一些屬性進行一些更改服務器的記錄。這些更改不應使記錄變髒,並且更改後的屬性不會顯示在record.changedAttributes()中。在此之後用戶可能做的任何更改應該使記錄變髒。

尋找解決的辦法

我試圖手動更改isDirty標誌,但它並沒有做到這一點。我也嘗試在加載記錄後設置狀態的ember數據代碼中找到位置(因爲基本上我正在嘗試做同樣的事情),但是我沒有找到它的位置。 我也試過record.send('pushedData'),但是我沒有改變任何記錄狀態。

任何幫助表示讚賞。

回答

3

我知道3種方法,允許修改服務器的應答,而不弄髒記錄:

  1. 您可以覆蓋適配器的handleResponse方法,做出正確有效載荷修改。

  2. 您可以覆蓋串行器的normalize方法。

  3. 您可以使用Ember。$ .ajax方法從服務器加載記錄,修改響應,然後將其傳遞到存儲的pushPayload方法。

如果您需要在每次從服務器加載(無論從哪個路由器/控制器進行加載)時修改記錄,前兩種方法都很好。適配器和序列化器都可以是模型特定的。如果你只需要在一個地方(控制器或路由)做,或者如果你需要訪問路由/控制器的變量 - 第三種方法是好的。

我不知道任何方式將記錄標記爲髒/不髒。如果您在記錄存儲後修改記錄,它會變髒。

+1

完美。 pushPayload爲我做了訣竅。我發現它可以用來通過發送應該修改的有效載荷部分來修改存儲中的現有記錄。 –

相關問題