Ember - 对于包含id的动态路由,路由器不会调用反序列化

时间:2012-11-08 11:13:43

标签: ember.js

我构建了以下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。

我错了或为什么反序列化没有被调用?

1 个答案:

答案 0 :(得分:0)

你的小提琴有一些错误,但我会假设这只是因为你只想提供足够的代码来展示deserialize。我现在忽略了那些错误。

只有在通过URL输入路径时才会调用反序列化函数。它基本上将URL实现(反序列化)为Ember对象。过渡到来自另一个州的路线不会反序列化,因为到那时应该没有任何反序列化。

当您使用此URL时,您可以看到:http://jsfiddle.net/rgHyB/134/show/#/cowans/1您的路由器实际上正在反序列化。无论deserialize返回什么,都是connectOutlets的第二个参数。此外,deserialize可以返回一个承诺,允许您稍后输入connectOutlets。这允许您等待ajax调用完成。