0

我构建了以下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 在调用 connectOutlets 的 url 中时。

我错了还是为什么不调用反序列化?

4

1 回答 1

0

您的小提琴有一些错误,但我假设这只是因为您只想提供足够的代码来显示deserialize. 我暂时忽略这些错误。

只有当您通过 URL 输入路由时,才会调用反序列化函数。它基本上将 URL 物化(反序列化)为 Ember 对象。从另一个状态转换到路由不会反序列化,因为到那时应该没有任何东西可以反序列化。

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

于 2012-11-08T16:40:08.103 回答