I have the following route
App.Router.map(function() {
this.resource('projects', {path: 'projects'}, function(){
this.route('new', {path: 'new'});
this.route('show', {path: ':project_id'});
this.route('edit', {path: ':project_id/edit'});
});
});
I want all the events from 'ProjectsNewController', 'ProjectsShowController', 'ProjectsEditController' to bubble to 'ProjectsController'.
How can I attain this? JSBin: http://jsbin.com/ucanam/1284/edit
The way event bubbling works in ember is not:
ChildController -> Controller -> ParentController
but rather:
View -> Controller -> Route -> ApplicationRoute (optionally)
Therefore if an event is fired from the view
it will bubble up to the controller
and stop there, if the controller
returns true
from the event handler then it will continue to bubble up to the route
. Events that are not handled in the controller
nor the route
will bubble all the way up to the ApplicationRoute
.
To achieve what you want to do you should use the needs
API to obtain access to the ProjectsController
and send the events/actions to that controller
using .send(...)
.
For example:
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');
}
}
});
Hope it helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With