我有一個模型,應該將客戶端已知模型的ID作爲數組保存到服務器,但我正在努力尋找實現此目的的好方法。Ember-Data模型應該保存非Ember-Data-Models的ID - 如何?
這裏是由客戶方已知的,因此應該不與服務器同步的模型類:
App.Browser = Em.Object.extend
name: ''
id: 0
App.Browser.reopenClass
all: [
UI.Browser.create(id: 1, name: 'Firefox')
UI.Browser.create(id: 2, name: 'Chrome')
]
find: (id) ->
if arguments.length == 0
return @all
else
@all.find((item) -> item.get('id') == id)
是同步到服務器的模式是這樣的:
App.Thingie = DS.Model.extend
browserIds: DS.hasMany 'UI.Browser' # <-- this does not work, of course
我試過到目前爲止:
- 編寫自定義餘燼數據本身與registerTransform綁定,映射到需要保存的每個對象的對象ID並保存結果數組。這適用於創建對象,但反序列化步驟不起作用,因爲在反序列化過程中您不知道映射ID的是哪個對象(信息在那裏不可用)。例子見[1]。
- 嘗試破解餘燼數據以接受與非餘燼數據模型的關聯,但沒有運氣。
我要嘗試的下一件事就是創建一個用於關聯瀏覽器對象的虛擬陣列屬性,另外還有一個將它們的id保存到同步到api的陣列的觀察者。這將不得不以2路方式工作,因爲加載的Thingie-Objects應該在從api(不僅僅是id)加載時提供相關聯的對象。
但是,也許有一個更簡單的方法來實現我在做什麼?非常感謝您的幫助。
[1] 在模型:
DS.attr 'recordArray', { defaultValue: [] }
在適配器:
DS.MyAdapter.registerTransform('recordArray',
deserialize: (serialized) ->
console.log('this does not work', serialized)
serialize: (deserialized) ->
deserialized.map((item) -> item.get('id'))
)
由於,這對我很有幫助。不幸的是,我必須應對的ID不是順序的,但我認爲當我將數組傳遞給registerEnumTransform時,我可以「欺騙」它們以獲得正確的索引。 –
是的,這應該是可能的。它可能是有意義的支持ID查找的轉換,會給一些想法... –