2014-01-08 3 views
3

Теперь это действительно вопрос, который развивается из this. Там гораздо больше информации, но я думаю, лучше спросить конкретный конкретный вопрос. Так вот он идет:Catch All Action Handler

Мы обычно определяют действия в контроллере так:

var FooController = Ember.Controller.extend({ 
    actions: { 
     login: function() { 
     } 
    } 
}); 

Есть ли способ определить поймать всех обработчик действия, как и (гипотетически):

actions: { 
    login: function() { 
    }, 
    *: function(actionName, paramArray) { 
    } 
} 

Это было бы аналогично углям catch all route, которые, я считаю, были реализованы, хотя я не пробовал.

Мне это нужно, потому что мой Ember.Component предоставляет пользователю partial template с помощью помощника {{partial}}. Это частичное может содержать {{action}}. Эти действия не превращаются в вызывающий контроллер или маршрут и теряются внутри компонента. Этот факт упоминается в docs в пункте 4.

Если поймать все действие было возможно, мой компонент может реализовать его и отправить действие обратно вызывающему используя что-то вроде этого:

actions: { 
    *: function(actionName, paramArray) { 
     this.sendAction(actionName, paramArray) 
    } 
} 

ответ

2

функциональность вокруг хэша actions на контроллерах, представлениях и маршрутах обеспечивается обработчик действий actionin [1]. Как вы можете видеть, он вводит метод send(actionName) и позволяет объекту получать действия. Теперь вы можете легко переопределить эту функцию и уловить все действия, а не искать ее в баре actions - это и есть реализация.

[1] https://github.com/emberjs/ember.js/blob/v1.3.0/packages/ember-runtime/lib/mixins/action_handler.js#L8