2012-08-23 11 views
5

estoy trabajando en extjs 4 aplicación MVC.¿Cómo reutilizar la tienda en la aplicación EXT JS 4 MVC sin recarga múltiple?

La aplicación ejecuta la ventana gráfica, que contiene tabpanel. Cada pestaña tiene su propio controlador y múltiples vistas.

Ver mis sandboxs en http://wap7.ru/folio/ext-reuseable-store/TE.html

tengo una tienda utiliza varias veces tienda configurada con carga automática (por ejemplo, una tableta en el cuadro combinado Menú superior, otro en la red clietns.): Cierto. Proxy está configurado en el Modelo.

Mi problema: la tienda se carga varias veces, en cada mención en la matriz del controlador [stores].

Si quito uno de la serie [tiendas] cuadro combinado controller- habrá vacío, aunque afirma tienda: Ext.getStore ('GUARDAR Id')

Por favor, dame una pista, o un ejemplo de reutilizando Tienda (no Modelo) como aquí http://docs.sencha.com/ext-js/4-0/#!/guide/mvc_pt2

+0

Publicar su código nos ayudará a diagnosticar esto mucho más fácil. –

+0

@Lev, ¿tiene la solución? Actualmente estoy atrapado en este tema, la respuesta a continuación está relacionada de alguna manera con la carga de la tienda, pero sospecho que este problema se relaciona con la asociación de modelos y las tiendas múltiples. Mostrar datos maestros no es sencillo a menos que necesite tener una tienda independiente del gráfico de objetos y un filtro de llamadas manualmente en el controlador. – CallMeLaNN

+0

no realmente. esperando que publiques un comentario con la solución algún día aquí. –

Respuesta

1

Puede simplemente crear una instancia de su tienda y cargarla, retire la carga automática.

var store = Ext.create('App.store.YourStore').load(); 

A continuación, pasar esa tienda a todos sus componentes, al igual que lo haría cuando se desea una barra de paginación conectado a una red.

+0

intenté hacer eso en Ext.application.launch() --------------- tienda se carga una vez, pero la cuadrícula y el combobox están vacíos –

0

Esto normalmente funciona bien para llamar a su tienda desde otros controladores:

Ext.getStore('PlatformClient'); 

nunca he tratado de poner la misma tienda en más de un controlador stores matriz. Eso me parece extraño.

Hay un par de otras rarezas sobre el código que ha publicado, tal vez solo sean errores tipográficos y tal vez no hacen ninguna diferencia en el marco pero son diferentes de lo que normalmente hago, así que ' ll señalarlos:

en primer lugar, la matriz de modelo en el "controlador típico" contiene una tienda:

models:[ 
'te.store.PlatformClient' 

], 

que uno es probablemente sólo un error tipográfico.

En segundo lugar, no pongo el espacio de nombre completo en las matrices de mi tienda, esto es algo que puede no hacer la diferencia, pero no sé. Quizás ExtJS esté anteponiendo el espacio de nombres en la parte superior del espacio de nombres que ha escrito, por lo que cree que crea una instancia de una tienda diferente cada vez que inicializa un nuevo controlador, lo que provoca que se vuelva a cargar. Por ejemplo, esto es más "normal" para lo que vale la pena:

stores:[ 
    'Taxonomy', 
    'PlatformClient', 
    'DataType' 
], 
controllers:[ 
    'Taxonomies' , 
    'DataType' , 
    'DataSale' , 
    'Clients' 
], 

Inténtelo de esa manera y deshacerse de las tiendas duplicadas en las otras matrices de tiendas controlador.

Además, quiero asegurarme de que capturó el bit en los documentos sobre la necesidad de no definir una configuración storeId para las tiendas MVC.El marco dará automáticamente el almacén de esto:

storeId: [StoreClassName] 

Así que en tu ejemplo, se llega a esto de forma automática:

storeId: 'PlatformClient' 

alguien había trouble with MVC stores recently y se remonta al marco está estupefacto por la audacia del desarrollador que proporciona su propia configuración storeId con el patrón MVC.

+0

1. 'te.store .PlatformClient' era un tipo, sí! 2. –

+0

Pongo mi código aquí. [enlace] (http://wap7.ru/folio/ext-reuseable-store/TE.html) echa un vistazo –

0

Tuvimos problemas similares con la carga. También tiene problemas con el filtrado en caso de uso múltiple de la misma tienda (es posible que desee establecer el filtro en uno pero no en el otro). Por lo tanto, cargamos todas las tiendas al inicio de la aplicación. Entonces, cada vez que necesitamos esa tienda para fines de visualización, en lugar de usar el original, lo estamos clonando en la memoria con la función de utilidad ha, como se muestra a continuación.

/** 
* Use this for example if you want to apply a filter on a store 
* but you dont want the original store to change, so: 
* singleton store has no filter 
* you clone it to be used with filters in some places. 
* 
* Note: this will have memory proxy, so no changes to the stores are persistent, 
* changes will have no effect on the local/remote db. 
* 
*/ 
createStore: function(storeId, data) { 

    // 
    // Creates a new store from the given array of records without 
    // registering the new store. 
    // See cloneStore for more info 
    // 
    var modelName = storeId; 
    var prevStore = Ext.getStore(storeId); 
    data = data || prevStore.data.all; 

    var clonedStore = Ext.create('App.store.' + storeId, { 
     data: data, 
     model: 'App.model.' + modelName, 
     proxy: 'memory' 
    }); 

    Ext.data.StoreManager.register(prevStore); 

    return clonedStore; 

} 

Tenga en cuenta que la copia clonada utiliza el proxy de memoria. Por lo tanto, las operaciones de escritura no deberían realizarse en él. Si necesita actualizar la tienda, siempre use el original.

Espero que esto ayude de alguna manera.

Cuestiones relacionadas