2013-09-24 3 views
2

У меня есть карта маршрутов, как показано ниже.EmberJS - вызов функции при изменении маршрута

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

Всякий раз, когда изменился маршрут поля, мне нужно вызвать функцию в полевом контролере. Есть ли способ сделать это?

init Функция в контроллере вызывается только один раз.

+0

Вы хотите вызвать метод при переходе к маршруту поля? –

+0

есть. внутри полевого контроллера. – user10

ответ

3

У вас есть два варианта, чтобы сделать то, что вы хотите, и они оба используют setupController крючок Route class.

Первый способ сделать wathever вы хотите сделать в функции setupController, например, так:

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

Второй способ заключается в вызове метода контроллера от setupController крюком маршрута. Я сделал скрипку, чтобы показать, как это работает: http://jsfiddle.net/NQKvy/237/

Оба метода будут запускать функцию при изменении URL-адреса. Если вы хотите, чтобы огонь срабатывал при одном и том же URL-адресе, он совершенно другой.

Дайте мне знать, если скрипка ответит на ваш вопрос.

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/

+0

+1 спасибо. оно работает. – user10

+0

@MarcioJunior как бы я мог выполнить функцию после того, как страница отобразилась без создания контроллера? Функция afterModel() выполняет вторую операцию перенаправления пользователя. –

Смежные вопросы