2017-05-31 17 views
0

で設定コントローラ属性は、私はいくつかのルート&私はmy.routeでエンバーtransitionToとコールバック

this.get('router').transitionTo("my.route").then(function (newRoute) { 
    newRoute.controller.set("controllerAttr1", controllerAttr1); // This code is called later 
}); 

my.routeにcontrollerAttr1を設定したい、私はcontroller.controllerAttr1

のチェックを持ってtransitionToにエンバーコードを持っていますコールバックコードが実行される前に
model: function (params) { 

}, 

setupController: function setupController(controller, model) { 
    // Issue us below check is executed before the callback code which sets "controllerAttr1" 
    if (controller.controllerAttr1) { 
     //Do something 
    } 
} 

しかし、私の問題はcontroller.controllerAttr1ため、このチェックが起こるのである

newRoute.controller.set("controllerAttr1", controllerAttr1); 

これを修正するにはどうすればよいですか?

答えて

0

https://github.com/tildeio/router.js/#asynchronous-transitions

からの遷移はそれほど頻繁に非同期 データの解像度を伴うので、router.js内のすべての遷移は、 はRSVPの約束ライブラリを活用し、非同期に実行されています。たとえば、transitionToの呼び出しで返される の値は、thenメソッドを持つTransitionオブジェクトであり、 がPromise APIに準拠しています。あなたは 移行後を実行したい任意のコードが終了したはあなたがtransitionToの成功ハンドラを使用することはできません.then

の成功ハンドラに配置する必要があります。 controllerインスタンスはsetupControllerフックでのみ利用可能ですので、答えはcontrollerAttr1に依存します。この値はどこでどのように取得されますか。

+0

コールバックの実行後にmodel/setupControllerフックを再実行するには – testndtv

+0

ユースケースを説明できる場合は、それを改善する方法があります。再実行は良くありません。まだ完了しているすべての作業をやり直したい場合は、まだ完了しています。それでは、ルートに 'リフレッシュ 'があります。 – kumkanillam

+0

シナリオは私が最初に説明したものです。ですから、my.route(model/setupControllerのコードを実行する)my.routeへの移行が発生し、my.routeのコントローラプロパティを設定するhook()コールバックが実行されます。しかし、ロジックがsetupControllerで早期に実行されたため、コードが正常に動作しない – testndtv

関連する問題