2016-06-14 46 views
0

我需要每一个控制器转移到(以下简称“建模”路线)的时间触发控制器动作,但我似乎无法得到它的工作。我router.js文件是:灰烬JS - 如何触发控制器操作时的路线被激活

var Router = Ember.Router.extend({ 
    location: config.locationType, 
    actions: { 
    loading: function() { 
     this.controllerFor('modeller').send('loading'); 
    }, 
    didTransition: function() { 
     this.controllerFor('modeller').send('didTransition'); 
    } 
    } 
}); 

Router.map(function() { 
    this.route('modeller', { path: 'modeller'}); 
    this.route('welcome', { path: '/'}); 
}); 
export default Router; 

我的建模控制器:

export default Ember.Controller.extend({ 
    needs: 'modeller', 

    loading: function() { 
    console.log("loading") 
    }, 

    didTransition: function() { 
    console.log("didTransition") 
    }, 
}); 

但我不能得到任何这些行动的登录到控制台。任何指针不胜感激。

UPDATE:

也许应该提到我用灰烬2.1.0!

所以我使用的解决方案是setupController - 但我也需要它放入下的应用程序/路由/ modeller.js特定建模路由文件。以前,我试图在app/router.js中做所有事情,并且它在那里不起作用。所以,最终的解决方案是:

# app/routes/modeller.js 
import Ember from 'ember'; 
export default Ember.Route.extend({ 

    setupController: function(controller, model) { 
    this.controllerFor('modeller').activate(); 
    } 
}); 

和..

# app/controllers/modeller.js 
export default Ember.Controller.extend({ 
    needs: 'modeller', 

    activate: function() { 
    console.log("activate") 
    }, 
}); 

回答

2

didTransitionRoute的方法,而不是Controller这就是为什么该方法是没有得到调用。

如果需要实现从路由控制器,你会想钩将setupController

最佳做法是使用components这将使您使用的组件lifecycle hooks

1

尝试在Route中使用willTransition。

当过渡尝试,无论是通过{{链接到}},transitionTo或URL改变,willTransition动作是在当前活动的路线解雇。这给出了每条活动路线,从最叶路线开始,有机会决定是否应该进行过渡。

https://guides.emberjs.com/v2.4.0/routing/preventing-and-retrying-transitions/

模型挂钩

激活&取消Ember.Route的挂钩也将呼吁路线之间的每个过渡,这两种也可以使用和内部 你可以呼叫控制器行动方法。

deactivate: function() { 
    this._super(); 
    this.get('controller').send('actionName'); 
}