Угасающие маршруты, что означает "это"?

Я знаком с тем, как это используется в 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;
    }
});
Другие вопросы по тегам