2013-10-02 8 views
5

я следующий маршрутсобытий барботирования через родительский контроллер

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

Я хочу, чтобы все события из «ProjectsNewController», «ProjectsShowController», «ProjectsEditController», чтобы пузырь «ProjectsController».

Как я могу достичь этого? JSBin: http://jsbin.com/ucanam/1284/edit

ответ

15

Путь событие кипящий работы в уголек является : не

ChildController -> Controller -> ParentController 

а:

View -> Controller -> Route -> ApplicationRoute (optionally) 

Поэтому, если событие вызывается из view он будет пузыриться на controller и остановитесь там, если controller возвращает true из обработчика событий, то он будет продолжать b ubble до 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'); 
    } 
    } 
}); 

Надеется, что это помогает.

+0

Bubbling in router проходит через всю иерархию маршрутов вплоть до маршрута приложения. Таким образом, одно действие может обрабатываться несколькими вложенными маршрутами, если их обработчики bubble (return true). – chrmod

Смежные вопросы