2016-06-14 4 views
0

Мне нужно запускать действие контроллера каждый раз, когда контроллер переходит к (маршрут «modeller»), но я не могу заставить его работать. Мой router.js файл:Ember 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:

Вероятно, следовало бы упомянуть, я использую Ember 2.1.0!

Таким образом, решение, которое я использовал, было setupController - но мне также нужно было поместить его в конкретный файл маршрута modeller в app/routes/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

didTransition является метод на Route, а не на Controller именно поэтому этот метод не вызывался.

Если вам нужно произвести управление с маршрута, то крючок, который вам нужен, будет setupController.

Лучшей практикой является использование components, что позволит вам использовать компонент lifecycle hooks.

1

Попробуйте использовать willTransition в Route.

При попытке перехода, через {{link-to}}, 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'); 
} 
Смежные вопросы