Sự kiện cách bọt công trình trong ember là không:
ChildController -> Controller -> ParentController
mà là:
View -> Controller -> Route -> ApplicationRoute (optionally)
Do đó, nếu một sự kiện được bắn từ view
nó sẽ bong bóng lên đến số controller
và dừng ở đó, nếu controller
trả về true
từ trình xử lý sự kiện thì nó sẽ tiếp tục ubble lên đến route
. Các sự kiện không được xử lý trong controller
cũng không phải route
sẽ bong bóng lên đến ApplicationRoute
.
Để đạt được những gì bạn muốn làm, bạn nên sử dụng API needs
để có quyền truy cập vào ProjectsController
và gửi các sự kiện/hành động đến số controller
sử dụng .send(...)
.
Ví dụ:
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');
}
}
});
Hy vọng nó giúp.
Bong bóng trong bộ định tuyến đi qua toàn bộ phân cấp tuyến đường đến tuyến ứng dụng. Vì vậy, một hành động có thể được xử lý bởi nhiều tuyến đường lồng nhau nếu bong bóng xử lý của chúng (trả về true). – chrmod