在标准的 ember mixin 示例中,我们添加实例方法/属性:http ://emberjs.com/api/classes/Ember.Mixin.html
使用reopenClass,我们可以添加类方法(静态方法),给我们类似的东西:
UninstantiatedClass.findAll()
我可以创建一个添加类方法的 mixin 吗?
在标准的 ember mixin 示例中,我们添加实例方法/属性:http ://emberjs.com/api/classes/Ember.Mixin.html
使用reopenClass,我们可以添加类方法(静态方法),给我们类似的东西:
UninstantiatedClass.findAll()
我可以创建一个添加类方法的 mixin 吗?
是的你可以!
只需在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 项目中完成的。
希望这可以帮助!
首先,我还在学习 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 对象。此外,您不能子类化多个父类。
无论如何,我希望这会有所帮助