Sposób zdarzenie propagacji prace w Ember jest nie:
ChildController -> Controller -> ParentController
ale raczej:
View -> Controller -> Route -> ApplicationRoute (optionally)
Dlatego jeśli zdarzenie jest zwolniony z view
to będzie bańka górę do controller
i zatrzymaj się tam, jeśli controller
zwraca true
z programu obsługi zdarzeń, to będzie nadal ubieł do route
. Zdarzenia, które nie są obsługiwane w trybie controller
ani route
, będą dymić do numeru ApplicationRoute
.
Aby osiągnąć to, co chcesz zrobić, należy użyć needs
API, aby uzyskać dostęp do ProjectsController
i wysyłania zdarzeń/działań do tej controller
użyciu .send(...)
.
Na przykład:
App.ProjectsController = Ember.ArrayController.extend({
actions:{
newProject: function() {
console.log("ProjectsController:newProject");
}
}
});
App.ProjectsNewController = Ember.ObjectController.extend({
needs: ['projects'],
actions:{
newProject: function() {
console.log("ProjectsNewController:newProject");
// forward action to ProjectsController
this.get('controllers.projects').send('newProject');
}
}
});
App.ProjectsEditController = Ember.ObjectController.extend({
needs: ['projects'],
actions:{
newProject: function() {
console.log("ProjectsEditController:newProject");
// forward action to ProjectsController
this.get('controllers.projects').send('newProject');
}
}
});
Nadzieję, że to pomaga.
Bubbling w routerze przechodzi przez całą hierarchię tras do trasy aplikacji. Tak więc jedna akcja może być obsługiwana przez wiele zagnieżdżonych tras, jeśli ich obsługa jest w fazie bubble (true). – chrmod