ember 中事件冒泡的工作方式不是:
ChildController -> Controller -> ParentController
反而:
View -> Controller -> Route -> ApplicationRoute (optionally)
因此,如果从 触发事件view
,它将冒泡到controller
并停在那里,如果从事件处理程序controller
返回true
,那么它将继续冒泡到route
. controller
未在或 中处理的事件route
将一直冒泡到ApplicationRoute
.
要实现您想要做的事情,您应该使用needs
API 来获取对 的访问权限ProjectsController
并将事件/操作发送到controller
使用.send(...)
.
例如:
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');
}
}
});
希望能帮助到你。