我构建了以下jsfiddle来说明我的问题。
在上面的要点中,我有一个包含动态id段的路由:
cowan: Ember.Route.extend
route: '/:cowan_id'
connectOutlets: (router, cowan) ->
router.get('applicationController').connectOutlet('cowan', cowan)
serialize: (router, id) ->
{cowan_id: id}
deserialize: (router, params) ->
console.log 'never gets here, do I need to put this logic in connectOutlets?'
App.cowans.filter((cow) -> cow.get('id') == params.cowan_id).get('firstObject')
问题是当我进入这条路线时,不会调用反序列化。
我认为当_id在url中时会调用connectOutlets。
我错了或为什么反序列化没有被调用?
答案 0 :(得分:0)
你的小提琴有一些错误,但我会假设这只是因为你只想提供足够的代码来展示deserialize
。我现在忽略了那些错误。
只有在通过URL输入路径时才会调用反序列化函数。它基本上将URL实现(反序列化)为Ember对象。过渡到来自另一个州的路线不会反序列化,因为到那时应该没有任何反序列化。
当您使用此URL时,您可以看到:http://jsfiddle.net/rgHyB/134/show/#/cowans/1您的路由器实际上正在反序列化。无论deserialize
返回什么,都是connectOutlets
的第二个参数。此外,deserialize
可以返回一个承诺,允许您稍后输入connectOutlets。这允许您等待ajax调用完成。