gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:12:30 24 4
gpt4 key购买 nike

我之前发现在创建一个新的 mixin 时可以扩展 mixin,如下所示:

App.SomeNewMixin = Ember.Mixin.create(App.SomeOldMixin, {
someMethod: function() { return true; }
});

现在我尝试使用两个现有的 mixin,但 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,所以我不确定如何继续。我试过在 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; }
});

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

最佳答案

创建一个扩展多个其他 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')
});

关于ember.js - 在 Ember.js 中创建新的 mixin 时,如何扩展多个 mixin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26130643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com