Ответ 1
На самом деле, это не Эмбер идиоматический. Из того, что я знаю, и что я узнал от самого Тома Дейла, вот несколько замечаний по поводу этого кода:
- Во-первых, вам не следует переходить из другого места, кроме внутреннего маршрутизатора: тем самым вы подвергаете себя серьезным проблемам, так как вы не знаете, в каком состоянии находится маршрутизатор, поэтому для того, чтобы поддерживать работу, вы быстро получите чтобы ухудшить ваш дизайн, и, кстати, общее качество вашего кода и, наконец, стабильность вашего приложения,
- Во-вторых, содержимое действия, которое вы показываете, должно находиться внутри маршрутизатора, чтобы избежать нежелательного выполнения контекста. Маршрутизатор действительно является способом обеспечения последовательного поведения для всего приложения, причем действия обрабатываются только в определенных состояниях. Пока вы выполняете реализацию действий в контроллерах, эти действия можно вызвать в любое время, включая неверные...
- Наконец, контроллеры Ember не нацелены на то, чтобы сдерживать поведение, поскольку они скорее являются добавочными обертками, содержащими в основном вычисляемые свойства. Если вы все же хотите факторизовать примитивы, возможно, модель может быть хорошим местом или сторонним контекстом, но, конечно, не Контроллером.
Вы должны обязательно указать действие внутри маршрутизатора и соответственно перейти к нему.
Надеюсь, это поможет.
UPDATE
Первый пример (рядом с вашим образцом)
На выделенном маршруте:
saveAndReturnSomewhere: function (router, event) {
var store = router.get('store'),
boardName = event.context; // you pass the (data|data container) here. In the view: {{action saveAndReturnSomewhere context="..."}}
store.createRecord(App.Board, {
title: boardName
});
store.commit();
router.transitionTo('somewhere');
}
Рефакторированный пример
Я бы рекомендовал следующие маршруты:
-
show
: отображает существующий элемент, -
edit
: предлагает ввести поля элемента
В прилагаемый маршрут, следующие обработчики событий:
-
createItem
: создать новый маршрут записи и перехода кedit
, например -
editItem
: transitionToedit
route
В маршрут edit
, следующие обработчики событий:
-
saveItem
: который будет передавать маршрут хранения и перехода вshow
, например