Угасающие маршруты, что означает "это"?
Я знаком с тем, как это используется в JS.
Пример из ember docs для создания маршрутов:
Router.map(function() {
this.route('about', { path: '/about' });
this.route('favorites', { path: '/favs' });
});
Их объяснение оставляет желать лучшего:
"При вызове map() вы должны передать функцию, которая будет вызываться со значением this, для объекта, который вы можете использовать для создания маршрутов".
Какой объект? Глобальный объект роутера?
2 ответа
Если вы распечатываете this
или если вы отладите код, вы увидите, что this
в map
Метод на самом деле является экземпляром объекта DSL. Это скрыто в API; что действительно происходит, так это; Ember.Router создает экземпляр DSL
и генерирует соответствующие путевые соответствия через этот объект и передает его фактическому маршрутизатору, инкапсулированному Ember.Router
сам. Конечно, в нашем приложении мы имеем дело только с Ember.Router
и не знает о деталях других классов. Если вам интересно, вы можете отслеживать исходный код по ссылкам, которые я предоставил (это то, что я сделал для некоторой работы всего неделю назад).
Да. Как вы сказали, это Router
объект. это определено в главном месте файла router.js. но мы не будем использовать свойства внутри map
функция.
Мы можем использовать свойства и его методы в Router, как показано ниже. Я продемонстрировал обратный вызов didTransition, который является полезным обратным вызовом после завершения перехода.
const Router = Ember.Router.extend({
location: config.locationType,
rootURL: config.rootURL,
myService:Ember.inject.service(),
didTransition() {
this._super(...arguments);
console.log(' After all the router transition complete ', ...arguments);
//if you override anywhere didTransition dont forget to return true to allow chain to reach here
return true;
}
});