2017-02-17 2 views
5

У меня есть два компонента и один сидел на другом. Мне нужно отправить событие основного маршрута от дочернего компонента (оба компонента использует в том же маршруте)Эмбер компонент отправить действие по маршруту

enter image description here

Пожалуйста, дайте мне знать, есть ли стандартный способ сделать это.

ответ

13

Для короткого ответа вы можете использовать аддон ember-route-action-helper.

<button {{action (route-action 'onButtonClick')}}>ClickToCallRouteAction</button> 

Есть три способа действия связи,

1. Старый стиль классические функции стиля т., Передавая имя функции в виде строки сверху вниз. и во всех местах нам нужно определить ту же функцию и обеспечить. Используйте sendAction для создания пузырьков. и send метод пузырька от контроллера до иерархии маршрутов.

Это не рекомендуется. образец классического стиля actions twiddle

2. Закрытие действия Использование action помощник передача функции, а не только строки. так что вам не нужно определять его везде. sample twiddle for closure actions стиль

3. route-action-helper addon Вы можете напрямую вызвать действие маршрут из любой точки мира буквально только оберточной функций с помощью route-action помощника.

Sample twiddle

Comparision между классическим стилем и стилем Закрытия и почему Закрытием является preferrable?

  • В классическом стиле, Вы должны определить действия на каждом уровне и использовать sendAction, чтобы вызвать действие на каждом уровне, пока вы не получили весь путь из вашего вложенности.
  • Вы можете вернуть значение в действиях закрытия, но не в классических действиях.
  • Вы можете каррировать значения в действиях закрытия, но не в классических действиях.
  • Действия закрытия немедленно прекращаются, если действие не найдено. но классические действия по дизайну лениво поднимали ошибки только при вызове значений .
  • Сложность кодирования, как кто будет обрабатывать действия и делать бизнес-логику ?.
  • В закрытии вы можете комбинировать действие и помощник мута, чтобы установить свойство со значением. onclick=(action (mut title) value="titlevalue")
  • В закрытии вы можете указать целевой объект для вызова функции. (action 'save' target=session) будет рассматривать хэш на actions на объекте session вместо текущего контекста.

Некоторых перспективных статей относительно этого,
- miguelcamba статьи ember-closure-actions-in-depth
- emberigniter статьи send-closure-actions-up-data-owner
- emberjs блог 1.13 release article
- эллинг - ember-best-practice-stop-bubbling-and-use-closure-actions
- блог с карты Ember Why action helper?
- блог от Alisdair McDiarmid ember-closure-actions-have-return-values
- blog from alexdiliberto ember-closure-actions

+0

Почему * стиль стиля классических функций стиля * не рекомендуется? Можете ли вы подробнее рассказать о различии между (1) и (2). –

+1

@ LiXinyang Обновленная разница и почему закрытие является предпочтительным и наряду с хорошей статьей. – kumkanillam

+0

Спасибо за ваше время @kumkanillam. Upvoted! +10 Все эти справки велики –

Смежные вопросы