在Ember.js中创建新的mixin时如何扩展多个mixin

sil*_*m99 6 mixins ember.js

我之前发现在创建新的mixin时可以扩展mixin:

App.SomeNewMixin = Ember.Mixin.create(App.SomeOldMixin, {
  someMethod: function() { return true; }
});
Run Code Online (Sandbox Code Playgroud)

现在我试图使用两个现有的mixin,但似乎Mixin.create只支持2个参数.

App.SomeNewMixin = Ember.Mixin.create(App.SomeOldMixinOne, App.SomeOldMixinTwo, {
  someMethod: function() { // No access to methods defined in SomeOldMixinOne }
});
Run Code Online (Sandbox Code Playgroud)

这似乎是Ember Mixins的严重限制.Ember文档对Ember.Mixin几乎没有报道,所以我不确定如何继续.我尝试在SomeNewMixin的init函数中使用Ember.Mixin.apply,也无济于事.

App.SomeNewMixin = Ember.Mixin.create({
  init: function() {
    this._super();
    this.apply(App.SomeOldMixinOne);
    this.apply(App.SomeOldMixinTwo);
  }

  someMethod: function() { return true; }
});
Run Code Online (Sandbox Code Playgroud)

任何有关可能的解决方案的见解将不胜感激!

jcb*_*bvm 9

创建一个扩展多个其他mixin的mixin应该可以正常工作.

例如,看看这个:

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')
});
Run Code Online (Sandbox Code Playgroud)