2013-05-20 35 views
7

Trong tiêu chuẩn dụ ember mixin chúng tôi thêm các phương pháp dụ/tài sản: http://emberjs.com/api/classes/Ember.Mixin.htmlTôi có thể thêm các phương pháp (tĩnh) lớp sử dụng EmberJS mixins

Với reopenClass chúng ta có thể thêm các phương pháp lớp (phương pháp tĩnh), đem lại cho chúng ta một cái gì đó như:

UninstantiatedClass.findAll() 

Tôi có thể tạo một bản mix cho biết thêm các phương pháp lớp học không?

Trả lời

13

Có bạn có thể!

Đơn giản chỉ cần cung cấp các mixin trong một invocation 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, { 
    ... 
}); 

tôi stumbled trên vấn đề này là tốt, và phát hiện này được thực hiện trong dự án Discourse.

Hy vọng điều này sẽ hữu ích!

1

Trước hết, tôi vẫn đang học EmberJS. :)

Tôi có cùng một vấn đề: cách thêm các phương thức lớp phổ biến vào một lớp.

hiểu biết của tôi là bạn không thể làm điều đó bằng mixins (Cảnh báo: Tôi có thể sai) nhưng bạn có thể làm điều đó bằng một lớp con đồng bằng.

Nhìn vào số jsbin này. App.Soldier là một lớp con của App.Person chứa các cá thể và các phương thức lớp. Chúng có sẵn cho App.Soldier.

Nếu bạn gõ các lệnh này trong bảng điều khiển

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

Những nhược điểm của phương pháp này là ai đó có thể tự do tạo một đối tượng App.Person. Hơn nữa, bạn không thể phân lớp nhiều lớp cha.

Dù sao, tôi hy vọng điều này sẽ giúp

+0

Cảm ơn David. Đó là sự hiểu biết của tôi cũng tại thời điểm này. Tôi vết thương viết một nhà máy để tạo ra những lớp học này. –

Các vấn đề liên quan