2017-02-17 28 views
5

Mam dwa komponenty i jeden siedzi na drugim. Muszę wysłać zdarzenie na głównej trasie z komponentu dzieci (oba składniki wykorzystywać w samej trasie)Składnik Ember wysłać akcję na trasie

enter image description here

Proszę dać mi znać, czy jest jakiś standardowy sposób, aby to zrobić.

Odpowiedz

13

Aby uzyskać krótką odpowiedź, możesz użyć dodatku ember-route-action-helper.

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

Istnieją trzy sposobem komunikacji actions

1. Stary styl klasyczny styl funkcje tj., Przekazując nazwę funkcji jako ciąg od góry do dołu. i we wszystkich miejscach musimy zdefiniować tę samą funkcję i zapewnić. Użyj bąbelka, aby uzyskać sendAction. i send bańka metody od kontrolera do hierarchii trasy.

Nie jest to zalecane. Próbka klasyczny styl actions twiddle

2. Działania Zamknięcie Zastosowanie action pomocnik wprost funkcyjne zamiast tylko ciąg. tak, że nie trzeba go definiować wszędzie. sample twiddle for closure actions styl

3. route-action-helper addon można bezpośrednio wywołać działanie trasy z dowolnego dosłownie tylko przez zawijania funkcji wykorzystujących route-action pomocnika.

Sample twiddle

Porównanie pomiędzy klasycznym stylu i stylu Zamknięcie i dlaczego zamknięcie jest preferuje?

  • w stylu klasycznym, trzeba zdefiniować działania na każdym poziomie i użyć sendAction aby wywołać działania na każdym poziomie, dopóki nie dostał całą drogę ze swojego gniazdowania.
  • Możesz zwrócić wartość w akcjach zamknięcia, ale nie w klasycznych działaniach.
  • Możesz przekierować wartości w akcjach zamknięcia, ale nie w klasycznych działaniach.
  • Działania zamykające ulegają natychmiastowemu niepowodzeniu, jeśli akcja nie zostanie znaleziona. ale klasyczne działania według projektu, leniwie podnoszą błędy tylko po wywołaniu wartości .
  • Złożoność kodowania, jak kto będzie obsługiwał akcje i logikę biznesową ?.
  • W zamknięciu można połączyć działanie i mut pomocnika, aby ustawić właściwość z wartością. onclick=(action (mut title) value="titlevalue")
  • W zamknięciu można określić obiekt docelowy, aby wywołać funkcję. (action 'save' target=session) będzie patrzył na mieszanie actions obiektu session zamiast bieżącego kontekstu.

Niektóre obiecujące artykule dotyczącym tego
- miguelcamba artykuł ember-closure-actions-in-depth
- emberigniter artykuł send-closure-actions-up-data-owner
- emberjs blog 1.13 release article
- stocznia - ember-best-practice-stop-bubbling-and-use-closure-actions
- blog z Ember mapie Why action helper?
- blog od Alisdair McDiarmid ember-closure-actions-have-return-values
- blog od alexdiliberto ember-closure-actions

+0

Dlaczego * stary styl klasycznych funkcji * nie jest zachęcany? Czy możesz rozwinąć więcej między różnicą między (1) i (2). –

+1

@LiXinyang Zaktualizowana różnica i dlaczego zamknięcie jest preferowane i wraz z dobrym artykułem. – kumkanillam

+0

Dzięki za poświęcony czas @kumkanillam. Rewizja! +10 Wszystkie te odniesienia są wspaniałe –