Javascript 余烬转换并在回调中设置控制器属性

Javascript 余烬转换并在回调中设置控制器属性,javascript,jquery,ember.js,Javascript,Jquery,Ember.js,我有余烬代码要转换到某个路由&我想在我的.route上设置controlleratr1 this.get('router').transitionTo("my.route").then(function (newRoute) { newRoute.controller.set("controllerAttr1", controllerAttr1); // This code is called later }); 在我的.route中,我检查了controller.controller

我有余烬代码要转换到某个路由&我想在我的.route上设置controlleratr1

this.get('router').transitionTo("my.route").then(function (newRoute) {
    newRoute.controller.set("controllerAttr1", controllerAttr1); // This code is called later
});
在我的.route中,我检查了controller.controlleratr1

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.controlleratr1的检查在执行回调代码之前发生

newRoute.controller.set("controllerAttr1", controllerAttr1);
如何修复此问题?

来自

因为转换常常涉及异步数据的解析 router.js中的所有数据转换都是异步执行的, 利用RSVP promise库。例如,返回的值 对Transition的调用是一个带有then方法的Transition对象, 遵守承诺API。要在 转换已完成必须放置在的成功处理程序中。然后


所以你不能使用成功的过渡者<代码>控制器实例仅在setupController钩子中可用,因此答案取决于
控制器TR1
从何处以及如何获得此值。

如何在执行then回调后重新执行模型/setupController钩子如果您可以解释我们的用例,那么将有更好的方法修复它。重新执行是不好的。但是如果你想重做所有的工作,那就刚刚完成。好的,然后在路径中有
刷新
,这样就可以了..场景就是我最初描述的场景。因此,my.route(它执行model/setupController中的一些代码)钩子发生了转换&随后执行then()回调,它在my.route上设置一些控制器属性。但是,由于逻辑是在setupController中较早执行的,因此我的代码无法按预期工作。现在,如果我在路由上使用refresh,它将具有更新的控制器属性,即ControllerATR1。因此,我将在then()回调中设置一些新属性,在我的控制器上听它,然后在我的眼睛中刷新。你可以。为什么在转换完成后需要一些
then()回调
,而可以在模型钩子之前执行,并在路由中设置一些属性,然后在setupController钩子中使用这些属性。