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 が url にある場合、代わりに connectOutlets が呼び出されると思います。

私は間違っていますか、なぜデシリアライズが呼び出されないのですか?

4

1 に答える 1

0

あなたのフィドルにはいくつかのバグがありますが、deserialize. 私は今のところそれらのバグを無視しています。

逆シリアル化関数は、URL からルートを入力したときにのみ呼び出されます。基本的に、URL を Ember オブジェクトに実体化 (逆シリアル化) します。別の状態からルートへの遷移は逆シリアル化されません。その時点までに逆シリアル化するものは何もないはずだからです。

この URL: http://jsfiddle.net/rgHyB/134/show/#/cowans/1を使用すると、ルーターが実際に逆シリアル化していることがわかります。deserialize返されるものは何でもの 2 番目のパラメータになりconnectOutletsます。また、deserializePromise を返すこともできるため、後で connectOutlets に入ることができます。これにより、ajax 呼び出しが完了するのを待つことができます。

于 2012-11-08T16:40:08.103 に答える