2013-08-09 43 views
14

Tôi đã xem qua số Ext.namespace() trong dự án mà tôi đang thực hiện.
Tôi đã xem Sencha's website và giải thích không hữu ích lắm.Ext.namespace là gì, chúng ta nên sử dụng chúng như thế nào?

Đây là những gì họ đang nói:

Tạo không gian tên được sử dụng để xác định phạm vi các biến và các lớp học để rằng họ không toàn cầu. Chỉ định nút cuối cùng của không gian tên tạo ngầm tất cả các nút khác.

Ext.namespace('Company', 'Company.data'); 

Họ cũng đề cập rằng Ext.ns('Company.data') là một lợi thế.

Tôi xin lỗi nếu câu hỏi này có vẻ đơn giản hoặc câm, nhưng tôi thực sự muốn hoàn toàn hiểu khái niệm này. Cảm ơn trước

Đây là những gì không phải là rất rõ ràng với tôi:

  • Nếu tôi có Ext.namespace('Company', 'Company.data') ở phía trên cùng của trang JS của tôi, điều này có nghĩa là nó mang tất cả các tên hàm khác và biến (như phạm vi toàn cục)?
  • Vị trí chính xác 'Công ty' và 'Company.data' là gì trong số Ext.namespace('Company', 'Company.data')?
  • Tại sao quy ước mới Ext.ns('Company.data') không có 'Công ty' như trong Ext.namespace?
  • Điều này có nghĩa là gì Specifying the last node of a namespace implicitly creates all other nodes?
  • Khi sử dụng chính xác ý tưởng này?

Trả lời

17

Trước hết, đây là Ext.ns('Company.data') là những gì tương đương với quá:

if (!Company) var Company = {}; 
if (!Company.Data) Company.Data = {}; 

Về cơ bản, nó chỉ là một shortcut để xác định sâu sắc cấu trúc lồng nhau của các đối tượng. Nó rất hữu ích nếu cấu trúc dự án của bạn theo cách này; Tôi đã xem các dự án với chương trình phụ trợ Java sao chép các tên gói com.company.app.data.package trong JavaScript, trong đó Ext.ns là một phím tắt đẹp mắt.


Phát biểu câu hỏi của bạn chỉ bằng điểm:

  • Nếu tôi có Ext.namespace('Company', 'Company.data') ở phía trên cùng của trang JS của tôi, điều này không có nghĩa là nó mang tất cả các tên hàm khác và các biến (giống như một phạm vi toàn cầu)?

số Bạn cần phải thêm vào Company.Data, như Company.Data.newVal = 5;.

  • Chính xác 'Công ty' và 'Công ty là gì.dữ liệu 'đứng trong số Ext.namespace('Company', 'Company.data')?

Đó là tên, do bạn chọn, theo quy ước dự án của bạn.

  • Tại sao mới ước Ext.ns('Company.data') không có 'công ty' như trong Ext.namespace?

Bởi vì 'công ty' được ngụ ý. Tức là, Ext.ns('Company', 'Company.data') giống như:

if (!Company) var Company = {}; 
if (!Company) var Company = {}; 
if (!Company.Data) Company.Data = {}; 

Điều này giúp bạn dễ dàng hiểu tại sao 'Công ty' đầu tiên thừa.

  • Điều này có ý nghĩa gì Specifying the last node of a namespace implicitly creates all other nodes?

  • Khi chính xác nên sử dụng ý tưởng này?

Tôi đã trả lời hai câu hỏi trên.

+0

giống như sau: nếu cửa sổ (cửa sổ ["Công ty"] === không xác định) ["Công ty"] = {}; – alexeiTruhin

3

Ext.namespace thực sự chỉ hữu ích nếu bạn muốn xác định các lớp của riêng bạn mà không sử dụng Ext.define.

Ví dụ dưới đây đòi hỏi các không gian tên được tạo ra trước thời hạn:

Company.data.Form = Ext.extend(...); //this is the old way of defining classes 

Cách thông thường để tạo các lớp ExtJS là:

Ext.define('Comany.data.Form', {...}); 

Phương pháp này tạo ra các không gian tên cho bạn tự động.

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