2013-10-02 14 views
5

Tôi đã theo tuyến đường sauEvent bọt thông qua bộ điều khiển cha mẹ

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'}); 
    }); 
}); 

Tôi muốn tất cả các sự kiện từ 'ProjectsNewController', 'ProjectsShowController', 'ProjectsEditController' để bong bóng để 'ProjectsController'.

Tôi làm cách nào để đạt được điều này? JSBin: http://jsbin.com/ucanam/1284/edit

Trả lời

15

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.

+0

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

Các vấn đề liên quan