Как добавить маршрут или состояние в Ember.Маршрутизатор во время выполнения?


У меня есть следующий Уголек.Маршрутизатор в моем приложении:

App.Router = Ember.Router.extend({
    location: 'hash',
    rootElement: '#content',
    enableLogging: true,

    root: Ember.State.extend({
        route: '/',

        index: Ember.State.extend({
            route: '/',
            redirectsTo: 'main.welcome'
        }),

        main: Ember.State.extend({
            route: '/main',

            welcome: Ember.ViewState.extend({
                route: '/welcome',
                view: App.WelcomeView
            })
        })
    })
});

Я хочу иметь возможность добавлять дополнительные маршруты, добавляя их в приложение.Маршрутизатор после того, как он был объявлен (это для включения произвольных модулей). Делается ли это до или после приложения.initialize() не имеет значения.

Вот пример того, как будет выглядеть объект маршрута модуля:

Module.routes = Ember.State.extend({
    route: '/module',
    index: Ember.State.extend({
        route: '/'
        view: Module.IndexView
    })
});
Любая помощь в этом вопросе очень ценится.
1 2

1 ответ:

Вы можете извлечь состояние, которое хотите обогатить, чтобы потом снова открыть его.

App = Ember.Application.create();

App.RootState = Em.State.extend({
    index : Em.State.extend({
        route : '/'
    }),
    main: Em.State.extend({
        route : '/main',
        index : Em.State.extend({
            route : '/'
        })
    })
});

App.Router = Ember.Router.extend({
    location : 'hash',
    enableLogging : true,
    root : App.RootState
});

// later...

App.RootState.reopen({
    module: Em.State.extend({
        route : '/module',
        index : Em.State.extend({
            route : '/'
        })
    })
});

App.initialize();​

EDIT: я использую последнюю версию на GitHub