Могу ли я добавить (статические) методы класса, используя миксины EmberJS

В примере стандартного миксина ember мы добавляем методы/свойства экземпляра: http://emberjs.com/api/classes/Ember.Mixin.html

С помощью reopenClass мы можем добавить методы класса (статические методы), что даст нам что-то вроде:

UninstantiatedClass.findAll()

Могу ли я создать миксин, добавляющий методы класса?


person Amir T    schedule 20.05.2013    source источник


Ответы (2)


Да, ты можешь!

Просто укажите миксин во время вызова reopenClass:

// 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.

Надеюсь это поможет!

person Dan G.    schedule 23.09.2013

Прежде всего, я все еще изучаю 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. Кроме того, вы не можете создавать подклассы для нескольких родительских классов.

В любом случае, я надеюсь, что это поможет

person David    schedule 04.07.2013
comment
Спасибо, Дэвид. Это мое понимание, а также на данный момент. Я написал фабрику для генерации этих классов. - person Amir T; 08.07.2013