Stworzyłem zestaw zagnieżdżonych komponentów. Kod:Ember: zdarzenia komponentów zagnieżdżonych propagacji
HTML:
{{#level-1}}
{{#level-2}}
{{#level-3}}
<button {{action 'handleAction'}}>
Click me (yielded)
</button>
{{/level-3}}
{{/level-2}}
{{/level-1}}
JS:
App.ApplicationController = Ember.Controller.extend({
actions: {
handleAction: function() {
alert('Handled in ApplicationController');
}
}
});
App.Level1Component = Ember.Component.extend({
actions: {
handleAction: function() {
alert('Handled in Level 1');
}
}
});
App.Level2Component = Ember.Component.extend({
actions: {
handleAction: function() {
alert('Handled in Level 2');
}
}
});
App.Level3Component = Ember.Component.extend({
actions: {
handleAction: function() {
alert('Handled in Level 3');
this.set('action', 'handleAction');
this.sendAction();
}
}
});
Co chcę osiągnąć jest bańka wydarzenia w następujący sposób:
Level3Component -> Level2Component -> Level1Component -> ApplicationController
Niestety, nie mogę obsługiwać zdarzenia wewnątrz dowolnego komponentu; impreza była transmitowana do ApplicationController
.
Czy istnieje sposób, aby zmusić działania Komponentów do bańki na całej hierarchii komponentów, tak, że mam alert pokazany 4 razy (po dodaniu this.sendAction oczywiście)?
Jeszcze raz, oto kod, na który można zagrać: http://emberjs.jsbin.com/hasehija/2/edit.
Dziękujemy! Odpowiedź na moje pytanie całkowicie! Zastanawiam się, czy rzecz z najbardziej wewnętrznym przyciskiem to naprawdę błąd. – andrusieczko
Hmm, prawdopodobnie to nie jest błąd ... Przycisk "Kliknij mnie (wewnątrz komponentu)" wywołuje 'Level3Component', a nie' Level2Component' tak dokładnie w miejscu, w którym został zdefiniowany. Myślę, że to właściwe zachowanie. – andrusieczko
Mówiłem o "Kliknij mnie (ustąpił)", powinien on celować w komponent zamiast w ApplicationController – ppcano