2017-05-31 56 views
0

设置控制器属性我有灰烬代码transitionTo一些航线&我想设置controllerAttr1上my.route灰烬transitionTo和回调

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

在my.route,我有controller.controllerAttr1

检查
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的成功投手。 controller实例仅在setupController挂接中可用,所以回答取决于controllerAttr1您在哪里以及如何获取此值。

+0

如何在执行回调函数后重新执行model/setupController钩子 – testndtv

+0

如果您可以解释我们的用例,那么将会有更好的方法来修复它。重新执行并不好。但是如果你想重做所有刚刚完成的工作。那么在路由中会出现'refresh',那会做.. – kumkanillam

+0

这个场景是我最初描述的那个。因此,一个转换发生在my.route(它在model/setupController中执行一些代码)挂钩,随后执行的then()回调会在my.route上设置一些控制器属性。但由于逻辑在setupController中较早执行,因此我的代码无法按预期工作 – testndtv