我正在使用Router
没有 ember-data 的新版本,所以我必须为动态 url 段实现我自己的serialize
/ deserialize
。
我有一个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
导航到item
特定项目的路线。{{action}}
此外,在此之后,我可以手动将 url 更改为特定id
的,而不会出现问题。
但是,如果我尝试在item
路线(即/item/2
)中启动我的应用程序,则deserialize
返回未定义。我假设这是因为Application#ready
尚未完成填充控制器。
我该如何解决这个问题?
编辑:我认为这回答了我的问题。使用 ember 数据。
异步
最后一点:您可能会问自己,如果应用程序在调用时尚未加载 Post 1 >,该系统将如何工作
App.Post.find(1)
。这样做的原因是它
ember-data
总是立即返回一个对象,即使它需要启动一个查询。该对象以空data
哈希开始。当服务器返回数据时,ember-data 会更新对象的data
,这也会触发对所有已定义属性(使用 定义的属性DS.attr
)的绑定。