2013-11-14 13 views
7

Có những lúc bạn sử dụng App.Model.reopenClass() trên mô hình (link) và hướng dẫn của Ember nói về App.Router.reopen() (link). Từ hướng dẫn Ember:Tại sao/khi nào bạn cần phải mở lại các lớp học trong ember.js?

reopen được sử dụng để thêm các phương thức và thuộc tính được chia sẻ trên tất cả các trường hợp của một lớp. Nó không thêm phương thức và thuộc tính vào một phiên bản cụ thể của một lớp như trong vanilla JavaScript (không sử dụng mẫu thử nghiệm).

Nhưng khi bạn cần tạo phương thức lớp hoặc thêm thuộc tính vào chính lớp , bạn có thể sử dụng reopenClass.

Khi nào điều này là cần thiết/thuận lợi? Có thể không chỉ thêm mọi thứ lên phía trước không?

Trả lời

3

reopenClass tương tự như thêm các phương thức vào mẫu thử nghiệm thay vì thêm các phương thức vào mỗi và mọi thể hiện của các lớp của bạn. Bạn có thể coi chúng như là các biến/phương thức tĩnh, thay vì các biến/phương thức mẫu.

Đó là mức tăng hiệu suất chính và có thể có ý nghĩa hơn đối với sự cố bạn đang giải quyết.

1

Một ví dụ mà bạn sẽ mở lại một lớp là khi bạn muốn thêm thuộc tính vào lớp được tạo mặc định hiện có. Ví dụ: nhiều phiên bản của các ứng dụng ember không mở rộng lớp router. Họ chỉ sử dụng lớp router mặc định. Nhưng nếu bạn muốn thêm một số thuộc tính vào lớp router mà bạn muốn sử dụng ở nơi khác. reopen là khá hữu ích ở đó. Đây là một trường hợp sử dụng tôi có thể nghĩ đến.

Ngoài ra, trong trường hợp Router mở rộng lớp là khó khăn vì hầu hết các mã trong ember chỉ sử dụng lớp router. Ngay cả khi bạn mở rộng, một số callbacks/closures sẽ vẫn tham chiếu đến lớp router cũ hơn.

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