2013-05-20 18 views

risposta

13

Sì, è possibile!

sufficiente fornire il mixin nel corso di un'invocazione 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, { 
    ... 
}); 

mi sono imbattuto in questo problema come bene, e scoperto questo viene fatto nel progetto discorso.

Spero che questo aiuti!

1

Prima di tutto, sto ancora imparando EmberJS. :)

Ho avuto lo stesso problema: come aggiungere metodi di classe comuni a una classe.

mia comprensione è che non è possibile farlo utilizzando mixin (Attenzione: potrei sbagliarmi) ma è possibile farlo utilizzando una sottoclasse pianura.

Guarda questo jsbin. App.Soldier è una sottoclasse di App.Person che contiene i metodi di istanza e classe. Questi sono disponibili per App.Soldier.

Se si digita questi comandi nella console:

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

Gli svantaggi di questo approccio è che qualcuno possa liberamente istanziare un oggetto App.Person. Inoltre, non puoi sottoclasse più classi genitore.

In ogni caso, spero che questo aiuti

+0

Grazie David. Questa è la mia comprensione anche a questo punto. Ho finito per scrivere una fabbrica per generare queste classi. –