2013-08-09 19 views
14

Natknąłem się na Ext.namespace() w projekcie, nad którym pracuję.
Sprawdziłem w Sencha's website i wyjaśnienie nie było bardzo pomocne.Co to jest Ext.namespace, jak z nich korzystać?

To jest to, co mówią:

Tworzy nazw mają być wykorzystywane do ustalania zakresu zmiennych i klas tak że nie są globalne. Określenie ostatniego węzła przestrzeni nazw powoduje niejawne utworzenie wszystkich pozostałych węzłów.

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

wspomnieć również, że Ext.ns('Company.data') jest korzystne.

Przepraszam, jeśli to pytanie wydaje się proste lub głupie, ale naprawdę chcę całkowicie zrozumieć tę koncepcję. Dzięki z góry

To, co nie jest dla mnie jasne:

  • Jeśli mam Ext.namespace('Company', 'Company.data') na szczycie mojej stronie JS, to znaczy, że wykonuje wszystkie inne nazwy funkcji i zmienne (jak zakres globalny)?
  • Co dokładnie oznacza "Firma" i "Company.data" w Ext.namespace('Company', 'Company.data')?
  • Dlaczego nowa konwencja Ext.ns('Company.data') nie ma nazwy "Firma" w wersji Ext.namespace?
  • Co to oznacza Specifying the last node of a namespace implicitly creates all other nodes?
  • Kiedy dokładnie ten pomysł powinien zostać użyty?

Odpowiedz

17

Po pierwsze, to co Ext.ns('Company.data') jest grubsza odpowiada za:

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

Zasadniczo, jest to tylko skrót do definiowania struktur głęboko zagnieżdżonych obiektów. Jest to przydatne, jeśli twój projekt struktury w ten sposób; Widziałem projekty z backendem Java, które powielają nazwy pakietów w kodzie JavaScript, dla których Ext.ns jest miłym skrótem.


Adresowanie pytania punkt po punkcie:

  • Jeśli mam Ext.namespace('Company', 'Company.data') na szczycie mojej stronie JS, to znaczy, że wykonuje wszystkie inne nazwy funkcji i zmiennych (jak Zakres globalny)?

Nie trzeba dodawać do Company.Data, jak Company.Data.newVal = 5;.

  • Co dokładnie 'Firma' i „Company.dane "oznaczają w Ext.namespace('Company', 'Company.data')?

Są to nazwy wybrane przez ciebie zgodnie z konwencją projektów.

  • Dlaczego nowa konwencja Ext.ns('Company.data') nie ma 'Spółka' jak w Ext.namespace?

Ponieważ "Spółka" jest dorozumiana. Oznacza to, że Ext.ns('Company', 'Company.data') jest jak:

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

To sprawia, że ​​łatwiej jest zrozumieć, dlaczego najpierw „Spółka” jest zbędna.

  • Co to oznacza Specifying the last node of a namespace implicitly creates all other nodes?

  • Kiedy dokładnie ten pomysł powinien zostać użyty?

Odpowiedziałem te dwa wyżej.

+0

to bardziej jak: jeśli (okno ["Firma"] === niezdefiniowane) okno ["Firma"] = {}; – alexeiTruhin

3

Ext.namespace jest przydatny tylko wtedy, gdy chcesz zdefiniować własne klasy bez użycia Ext.define.

Poniższy przykład wymaga przestrzenie nazw zostać utworzone z wyprzedzeniem:

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

Standardowym sposobem na tworzenie klas ExtJS jest:

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

Ta metoda tworzy nazw automatycznie.