Несколько миксинов с одинаковыми событиями в Ember.js

Я хотел бы включить несколько примесей в представление в Ember.js, и несколько примесей и/или представление используют одно и то же событие (например, willInsertElement). Я использую Ember 1.4.0-beta.5.

Я понимаю, что событие в каждом миксине будет переопределено представлением. Однако я читал, что можно использовать один и тот же обработчик событий в миксине и представлении или несколько миксинов, включенных в одно и то же представление, вызвав this._super(); в начале вышеупомянутого метода события миксина. Однако мне не удалось успешно осуществить это. Таким образом, мой вопрос заключается в том, как я могу написать логику в одном и том же обработчике событий в представлении и миксине (или нескольких миксинах, включенных в одно и то же представление), чтобы вызывалась вся логика в каждом вхождении обработчика событий.

Вот пример:

App.StatsView = Em.View.extend(
    App.DateFormatting, {

    willInsertElement: function() {
        // Some view-specific logic I want to call here
    },
});

App.DateFormatting = Em.Mixin.create({

    willInsertElement: function() {
        this._super(); // This doesn't work.
        // Some mixin logic I want to call here
    },
});

Н.Б. Один из подходов здесь может заключаться в том, чтобы не использовать миксин и вместо этого расширить представление (поскольку willInsertElement специфичен для Em.View), но это невозможно поддерживать в наших приложениях.


person Duncan Walker    schedule 04.03.2014    source источник


Ответы (1)


Если разные функции, которые вы используете, не зависят друг от друга, лучшим решением будет не переопределять хук willInsertElement, а указать функции, которая будет вызвана при вызове события/хука.

Нравиться:

App.StatsView = Em.View.extend(App.DateFormatting, {
  someSpecificFunction: function () {
    console.log('beer me');
  }.on('willInsertElement')
});

App.DateFormatting = Em.Mixin.create({
  dateFormattingFunction: function () {
    console.log('beer you');
  }.on('willInsertElement')
});
person herom    schedule 04.03.2014