在标准的ember mixin示例中,我们添加了实例方法/属性:http://emberjs.com/api/classes/Ember.Mixin.html
使用reopenClass我们可以添加类方法(静态方法),给我们类似的东西:
UninstantiatedClass.findAll()
我可以创建一个添加类方法的mixin吗?
答案 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对象。而且,您不能将多个父类子类化。
无论如何,我希望这有帮助