[英]initialization with serialize/deserialize ember.js
我正在使用沒有ember數據的新Router
,因此必須為動態url段實現自己的serialize
/ deserialize
serialize
。
我有一個ArrayController
,其中填充了Application#ready
數據。
為簡單起見,假設我有2條路線: item > '/item/:item_id'
& items > '/items'
。
item
路線中的反序列化方法看起來與此類似
deserialze: function(router, params){
return router.get('myController')
.findProperty('id', params['item_id']);
}
如果我在items
路線上初始化我的應用,然后通過{{action}}
導航到特定商品的item
路線,則一切正常。 另外,在這之后,我可以手動將URL更改為特定的id
,而不會出現問題。
但是,如果我嘗試在item
路由(即/item/2
)中啟動我的應用,則deserialize
將返回未定義的結果。 我假設這是因為Application#ready
尚未完成填充控制器。
我該如何解決?
編輯:我認為這回答了我的問題。 使用余燼數據。
異步
最后一點:您可能會問自己,如果在調用
App.Post.find(1)
時應用尚未加載Post 1>,則該系統如何工作。之所以起作用,是因為
ember-data
總是立即返回一個對象,即使它需要啟動查詢也是如此。 該對象從一個空的data
哈希開始。 服務器返回數據時,ember-data更新對象的data
,這還會觸發所有已定義屬性(使用DS.attr
定義的屬性)上的綁定。
我不知道如何解決初始化問題,但是如果您不想這樣做,絕對不必使用ember-data
。
性格方面,我有:
Ember.Route
的deserialize
方法, App.ModelFetcher
類:
find(id, doneRequestCallback, failRequestCallback)
all(doneRequestCallback, failRequestCallback)
deserialize
調用App.ModelFetcher.find(id, function() {}, function() {})
像ember-data
一樣,這兩種方法分別返回一個空的App.Model
對象和一個空數組。 完成請求后,這些對象將使用請求值進行膨脹。
可能有更好的解決方案,但是對我來說很好,並且看起來還不錯。
您還可以代替定義deserialize
方法,只需定義經典的App.Model.find(id)
函數(該函數返回一個空的App.Model
實例),然后為對象設置狀態,如ember-data
那樣(參見http://goo.gl/3otkt )。
如果動態片段的格式為model_id
(請參見http://goo.gl/y86KE ),則該方法將由ember自動調用。
無論如何,我可能是錯的,但是我不喜歡您試圖在控制器中獲取對象的事實,但是除了上述方法之外,我沒有其他解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.