2016-04-20 1 views
1

I Ext JS bin neu und haben zwei Möglichkeiten, in denen ein Gitter/Baum bemerkt, kann eine Datenquelle binden (Store):Ext JS - beste Weg, Panel-Datenspeicher zu binden

  1. Ext.data.StoreManager.lookup('someStoreId');
  2. Ext.getStore('someStoreId');

Ist Ext.getStore nur einige Abkürzung für StoreManager.lookup? Gibt es einen Leistungsunterschied zwischen den beiden oder würde es als bestes Verfahren angesehen, eines über dem anderen zu verwenden?

Antwort

2

Ja, sie sind die gleiche Sache, es spielt keine Rolle, welche Sie anrufen, getStore ist für die Eingabe Bequemlichkeit und it calls StoreManager.

http://docs.sencha.com/extjs/5.1/5.1.1-apidocs/#!/api/Ext-method-getStore

Abkürzung zu Ext.data.StoreManager.lookup.

Und sie sind beide schreckliche Ideen. Sie erstellen im Wesentlichen globale Variablen. Sie sollten stattdessen Referenzen auf die von Ihnen erstellten Shops weitergeben.

Nehmen Sie ihre grid example:

Ext.create('Ext.data.Store', { 
    fields:[ 'name', 'email', 'phone'], 
    data: [ 
     { name: 'Lisa', email: '[email protected]', phone: '555-111-1224' }, 
     { name: 'Bart', email: '[email protected]', phone: '555-222-1234' }, 
     { name: 'Homer', email: '[email protected]', phone: '555-222-1244' }, 
     { name: 'Marge', email: '[email protected]', phone: '555-222-1254' } 
    ] 
}); 

Ext.create('Ext.grid.Panel', { 
    title: 'Simpsons', 
    store: Ext.data.StoreManager.lookup('simpsonsStore'), 
    columns: [ 
     { text: 'Name', dataIndex: 'name' }, 
     { text: 'Email', dataIndex: 'email', flex: 1 }, 
     { text: 'Phone', dataIndex: 'phone' } 
    ], 
    height: 200, 
    width: 400, 
    renderTo: Ext.getBody() 
}); 

Es neu geschrieben werden kann, so dass das Geschäft nicht global erreichbar ist, da der Filialleiter ein globales Singleton ist.

var store = Ext.create('Ext.data.Store', { 
    storeId: 'simpsonsStore', 
    fields:[ 'name', 'email', 'phone'], 
    data: [ 
     { name: 'Lisa', email: '[email protected]', phone: '555-111-1224' }, 
     { name: 'Bart', email: '[email protected]', phone: '555-222-1234' }, 
     { name: 'Homer', email: '[email protected]', phone: '555-222-1244' }, 
     { name: 'Marge', email: '[email protected]', phone: '555-222-1254' } 
    ] 
}); 

Ext.create('Ext.grid.Panel', { 
    title: 'Simpsons', 
    store: store, 
    columns: [ 
     { text: 'Name', dataIndex: 'name' }, 
     { text: 'Email', dataIndex: 'email', flex: 1 }, 
     { text: 'Phone', dataIndex: 'phone' } 
    ], 
    height: 200, 
    width: 400, 
    renderTo: Ext.getBody() 
}); 
+0

die Spitze Schätzen Sie eine Referenzvariable als Alternative – tommyO

+1

Der Laden ist immer noch global erreichbar über Storemanager über vorbei, und es gibt keine Möglichkeit, den Speicher zur Verfügung steht über Storemanager zu vermeiden - nur Sie nicht, dass die globale Sichtbarkeit verwenden. Ein Geschäft mit einer storeId ist immer mit StoreManager registriert; und ich denke Geschäfte ohne explizite Shop-ID erhalten eine automatisch generierte storeId vor der Registrierung. Um ehrlich zu sein, denke ich, dass sowohl der Filialleiter als auch der lokale Bereich ihre Anwendungsfälle haben. Die übliche Methode, einen Speicher an ein Grid in einer Anwendung zu binden, ist 'store: 'myStore'', der übrigens' StoreManager.lookup' unter der Haube verwendet. – Alexander

+0

@Alexander Ich wollte die 'storeId' aus der Deklaration entfernen, behoben. Und ja, sie können ihre Anwendungsfälle haben, aber eine globale muss wirklich sein, wenn Sie keinen anderen Ausweg haben ... Es stört mich nur, dass Ext es in einfachen Beispielen verwendet, wo sie nicht notwendig sind –