我有如下的路线图。
App.Router.map(function() {
this.resource('category', function() {
this.resource('field', { path: ':field_id' });
});
});
每当字段路由发生变化时,我需要在FieldController中调用一个函数。有没有办法做到这一点?
Controller中的 init
函数只被调用一次。
答案 0 :(得分:3)
就像@knikolov所说,你可以使用afterModel
在转换到FieldRoute
时收到通知。要获得FieldController
个实例,您可以使用this.controllerFor('field')
:
App.FieldRoute = Ember.Route.extend({
afterModel: function() {
this.controllerFor('field').myMethod();
}
});
App.FieldController = Ember.ObjectController.extend({
myMethod: function() {
alert('myMethod');
}
});
的小提琴
答案 1 :(得分:3)
您有两个选项可以执行您想要的操作,并且它们都使用Route class的setupController挂钩。
第一种方法是在setupController函数中执行想要执行的操作,如下所示:
setupController: function(controller, model){
alert('myAlert');
}
第二种方法是从路由的setupController挂钩调用控制器的方法。我做了一个小提琴来展示它的工作原理:http://jsfiddle.net/NQKvy/237/
两种方法都会在URL更改时触发该函数。如果你想在保持相同的URL的同时触发一个功能,那么它就完全不同了。
如果小提琴回答你的问题,请告诉我。