TransitionTo и новый Ember Router

Новый роутер Ember поставил меня в тупик. Кто-нибудь знает, как вручную инициировать изменение URL-адреса, когда вы (1) НЕ используете перенаправление в маршрутизаторе (2) НЕ используете помощник linkTo?

Кажется, это:

App.container.lookup('router:main').router

больше не работает, с сегодняшней сборки.


person Han    schedule 07.01.2013    source источник
comment
Откуда вы будете вызывать маршрутизатор?   -  person sly7_7    schedule 08.01.2013
comment
@ sly7_7 ну, я в основном пытаюсь заставить ember хорошо работать с другой библиотекой javascript, которая рисует всевозможные вещи на dom (очень раздражает). Что я хотел бы сделать, так это вручную инициировать изменение состояния маршрутизатора, скажем, по событию щелчка на этих вставленных элементах dom.   -  person Han    schedule 08.01.2013
comment
Итак, вы находитесь в представлении, которое обычно имеет контроллер. На сегодняшний день вы можете вызвать view.get('controller').transitionTo('state')   -  person sly7_7    schedule 08.01.2013
comment
Похоже, лучший способ сделать это — настроить события и отправить их контроллером. Однако у меня та же проблема, что и у вас. Я работаю со сторонней библиотекой и не знаю, как ссылаться на текущий контроллер/представление, чтобы запускать события или запускать переход.   -  person Evan R.    schedule 08.01.2013


Ответы (2)


Кажется, это сложно сделать в новом роутере ember, потому что ember усердно работает над тем, чтобы вы не писали код в этом стиле. Вместо того, чтобы обращаться к экземпляру маршрутизатора (или чего-либо еще) через App, код вашего приложения ember должен работать со свойствами, которые были внедрены фреймворком во время выполнения. Как упоминалось выше @ sly7_7, ваше представление будет иметь доступ к контроллеру, и контроллер может вызвать переход, например:

view.get('controller').transitionTo('state')

В зависимости от того, как работает ваша сторонняя библиотека, вы можете сделать это, инициировав событие в dom (обрабатывается представлением) или зарегистрировав обратный вызов при отображении представления изнутри didInsertElement

Главное помнить, что App.anything-in-lowercase вообще плохая практика. По возможности старайтесь, чтобы фреймворк позаботился о создании экземпляров и объединении классов вашего приложения.

Подробнее см. в примечаниях к этому коммиту: https://github.com/emberjs/ember.js/commit/5becdc4467573f80a5c5dbb51d97c6b9239714a8

person Mike Grassotti    schedule 07.01.2013
comment
после комментариев @ sly7_7 я понял, как обернуть свои шаблоны в представление, которое затем будет реагировать на события браузера. я думаю, это, вероятно, к лучшему, если это считается лучшей практикой. Спасибо! - person Han; 08.01.2013

Вы можете попробовать это:

App.__container__.lookup('router:main').transitionTo('name_of_your_route');
person HaoQi Li    schedule 22.08.2013