2013-08-09 18 views
14

Mi sono imbattuto nel Ext.namespace() nel progetto a cui sto lavorando.
Ho cercato in Sencha's website e la spiegazione non è stata molto utile.Che cos'è Ext.namespace, come dovremmo usarli?

Questo è quello che stanno dicendo:

Crea spazi dei nomi da utilizzare per scoping variabili e classi in modo che non sono globali. La specifica dell'ultimo nodo di uno spazio dei nomi crea implicitamente tutti gli altri nodi.

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

Essi citano anche che Ext.ns('Company.data') è preferibile.

Mi scuso se questa domanda sembra semplice o stupida, ma voglio davvero capire completamente questo concetto. Grazie in anticipo

Questo è ciò che non è molto chiaro per me:

  • Se ho Ext.namespace('Company', 'Company.data') in cima alla mia pagina di JS, questo significa che porta tutti gli altri nome della funzione e variabili (come un ambito globale)?
  • Che cosa rappresentano esattamente "Azienda" e "Company.data" in Ext.namespace('Company', 'Company.data')?
  • Perché la nuova convenzione Ext.ns('Company.data') non ha "Società" come in Ext.namespace?
  • Cosa significa questo Specifying the last node of a namespace implicitly creates all other nodes?
  • Quando esattamente questa idea dovrebbe essere utilizzata?

risposta

17

Innanzitutto, questo è ciò che è approssimativamente equivalente Ext.ns('Company.data') troppo:

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

Fondamentalmente, è solo una scorciatoia per definire profondamente strutture annidate di oggetti. È utile se il tuo progetto si struttura in questo modo; Ho visto i progetti con un backend Java che duplicano i nomi dei pacchetti com.company.app.data.package in JavaScript, per il quale Ext.ns è una bella scorciatoia.


Affrontare le vostre domande punto per punto:

  • Se ho Ext.namespace('Company', 'Company.data') in cima alla mia pagina di JS, questo significa che porta tutti gli altri nome della funzione e le variabili (come un ambito globale)?

No. Bisogna aggiungere al Company.Data, come Company.Data.newVal = 5;.

  • Che cosa e 'Company 'Company'.dati 'corrispondono a Ext.namespace('Company', 'Company.data')?

Sono nomi, scelti da voi, seguendo la convenzione dei vostri progetti.

  • Perché nuova convenzione Ext.ns('Company.data') non hai 'Company' come in Ext.namespace?

Perché "Società" è implicita. Cioè, è come Ext.ns('Company', 'Company.data'):

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

Questo rende più facile capire perché la prima 'Società' è ridondante.

  • Cosa significa Specifying the last node of a namespace implicitly creates all other nodes?

  • Quando esattamente questa idea dovrebbe essere utilizzato?

ho risposto a queste due sopra.

+0

è più simile a: if (finestra ["Società"] === indefinito) finestra ["Società"] = {}; – alexeiTruhin

3

Ext.namespace è veramente utile solo se si desidera definire le proprie classi senza usare Ext.define.

L'esempio che segue richiede gli spazi dei nomi da creare prima del tempo:

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

Il metodo standard per la creazione di classi ExtJS è:

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

Questo metodo crea gli spazi dei nomi per voi automaticamente.