EmberJS - 每当路线改变时调用一个函数

时间:2013-09-24 13:12:31

标签: ember.js

我有如下的路线图。

App.Router.map(function() {
    this.resource('category', function() {
        this.resource('field', { path: ':field_id' });
    });
});

每当字段路由发生变化时,我需要在FieldController中调用一个函数。有没有办法做到这一点?

Controller中的

init函数只被调用一次。

2 个答案:

答案 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');
    }
});

以下是此示例http://jsfiddle.net/marciojunior/Q5XWg/

的小提琴

答案 1 :(得分:3)

您有两个选项可以执行您想要的操作,并且它们都使用Route class的setupController挂钩。

第一种方法是在setupController函数中执行想要执行的操作,如下所示:

setupController: function(controller, model){
 alert('myAlert');
}

第二种方法是从路由的setupController挂钩调用控制器的方法。我做了一个小提琴来展示它的工作原理:http://jsfiddle.net/NQKvy/237/

两种方法都会在URL更改时触发该函数。如果你想在保持相同的URL的同时触发一个功能,那么它就完全不同了。

如果小提琴回答你的问题,请告诉我。