Как расширить несколько миксинов при создании нового миксина в Ember.js?
Ранее я обнаружил, что можно расширять миксины при создании нового миксина, например:
App.SomeNewMixin = Ember.Mixin.create(App.SomeOldMixin, {
someMethod: function() { return true; }
});
Сейчас я пытаюсь использовать два существующих миксина, но, похоже, Mixin.create поддерживает только 2 параметра.
App.SomeNewMixin = Ember.Mixin.create(App.SomeOldMixinOne, App.SomeOldMixinTwo, {
someMethod: function() { // No access to methods defined in SomeOldMixinOne }
});
Это кажется серьезным ограничением Ember Mixins. Документы Ember практически не охватывают Ember.Mixin, поэтому я не совсем уверен, как действовать дальше. Я пытался использовать Ember.Mixin.apply в функции инициализации SomeNewMixin, но также безрезультатно.
App.SomeNewMixin = Ember.Mixin.create({
init: function() {
this._super();
this.apply(App.SomeOldMixinOne);
this.apply(App.SomeOldMixinTwo);
}
someMethod: function() { return true; }
});
Любое понимание возможных решений будет с благодарностью!
1 ответ
Создание миксина, который расширяет множество других миксинов, должно работать нормально.
Например, посмотрите на это:
var App = Ember.Application.create();
App.SomeOldMixin = Ember.Mixin.create({
someOldMethod: function() { return 'old'; },
someOldMethod2: function() { return 'old2'; }
});
App.SomeNewMixin = Ember.Mixin.create({
someNewMethod: function() { return 'new'; }
});
App.SomeNewerMixin = Ember.Mixin.create({
someNewerMethod: function() { return 'newer'; }
});
App.SomeNewestMixin = Ember.Mixin.create(App.SomeOldMixin, App.SomeNewMixin, App.SomeNewerMixin, {
someOldMethod: function() {
return this._super() + ' ' + this.someOldMethod2();
},
someNewestMethod: function() { return 'newest'; }
});
App.ApplicationController = Ember.Controller.extend(App.SomeNewestMixin, {
test: function() {
console.log(this.someOldMethod());
console.log(this.someNewMethod());
console.log(this.someNewerMethod());
console.log(this.someNewestMethod());
}.on('init')
});