8

在标准的 ember mixin 示例中,我们添加实例方法/属性:http ://emberjs.com/api/classes/Ember.Mixin.html

使用reopenClass,我们可以添加类方法(静态方法),给我们类似的东西:

UninstantiatedClass.findAll()

我可以创建一个添加类方法的 mixin 吗?

4

2 回答 2

14

是的你可以!

只需在reopenClass 调用期间提供mixin:

// The mixin itself
FooMixin = Em.Mixin.create({
   ...
});

// Mix in at the instance level
BarClass = Em.Object.extend(FooMixin, {
   ...
});

// Mix in at the class level
BarClass.reopenClass(FooMixin, {
   ...
});

我也偶然发现了这个问题,并发现这是在 Discourse 项目中完成的。

希望这可以帮助!

于 2013-09-23T18:06:06.290 回答
1

首先,我还在学习 EmberJS。:)

我有同样的问题:如何将通用类方法添加到类中。

我的理解是你不能使用 Mixins 来做到这一点(警告:我可能错了),但你可以使用普通的子类来做到这一点。

看看这个jsbin。App.Soldier 是 App.Person 的子类,其中包含实例和类方法。这些可供 App.Soldier 使用。

如果您在控制台中键入这些命令:

x = App.Soldier.create();
x.hello(); // => "hello world!"
x.fire(); // => "Laser gun, pew! pew!"
App.Soldier.identifyYourself(); // => "I'm a humanoid carbon unit"

这种方法的缺点是有人可以自由地实例化 App.Person 对象。此外,您不能子类化多个父类。

无论如何,我希望这会有所帮助

于 2013-07-04T07:51:40.447 回答