我可以使用EmberJS mixins添加(静态)类方法

时间:2013-05-20 23:06:51

标签: javascript ember.js static-methods class-method

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

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

UninstantiatedClass.findAll()

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

2 个答案:

答案 0 :(得分: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, {
   ...
});

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

希望这有帮助!

答案 1 :(得分: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对象。而且,您不能将多个父类子类化。

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