sencha - extjs docs
ExtJS 4 Cambiar la tienda de la grilla sobre la marcha (4)
¿Es posible cambiar la tienda de la grilla en ExtJS 4?
Por ejemplo, tengo dos modelos:
User = Ext.define(''User'',{
extend: ''Ext.data.Model'',
[...],
hasMany: ''Product''
});
Product = Ext.define(''Product'',{
extend: ''Ext.data.Model'',
[...]
});
y dos rejillas La primera grilla está vinculada con la Tienda, que usa el modelo de User
y carga datos json anidados desde el back-end, como
{
users: [{
id: 1,
products: [
{id: 1},
{id: 2}
]
}, {
id: 2,
products: [
{id: 3},
{id: 4},
{id: 5}
]
}]
}
Todo lo que quiero obtener es cuando haga clic en la fila en la primera grilla, la segunda grilla debe mostrar los productos del usuario, sin conexión al servidor. Todo lo que sé es que user.products();
devuelve un objeto Ext.data.Store
. Entonces la idea es cambiar la tienda de la segunda grilla por user.products();
, pero no hay tal método grid.setStore()
:-)
Gracias por adelantado
Creo que una mejor solución sería:
grid1.on(''itemclick'', function(view, record) {
grid2.reconfigure(record.products());
);
Estás mirando las tiendas de la manera incorrecta. Una tienda está conectada a la cuadrícula para siempre, por lo tanto, no hay grid.setStore()
. NO cambias una tienda por una grilla, sino que cambias los DATOS en la tienda para esa grilla.
Ahora, solución a su problema: está en lo correcto con la parte que ya tiene una instancia de almacenamiento con sus datos. es decir; user.products()
. Aún así, tendrás que crear una tienda para tu grilla. Sin embargo, esta tienda no tendrá ningún dato. Ahora, cuando necesita mostrar información de productos, necesita cargar la tienda de la grilla con datos. Puedes usar:
- carga()
- Cargar datos()
- loadRecord ()
para cargar datos en tu tienda En tu caso, puedes hacer lo siguiente:
myStore = user.products();
grid.getStore().loadRecords(myStore.getRange(0,myStore.getCount()),{addRecords: false});
La respuesta de Abdel Olakara me ayudó cuando necesité actualizar los datos en algo que no se había reconfigure
(herencia personalizada de clases desde Ext.form.FieldSet
).
Pero no es necesario que especifique addRecords
o el rango de getRange
, ya que los valores predeterminados nos tienen cubiertos en este caso.
Esto significa que puedes hacer:
myStore = user.products();
grid.getStore().loadRecords(myStore.getRange());
Si desea adjuntar una tienda a una cuadrícula después de que se haya creado la cuadrícula, puede usar el método bindStore() .
var store = user.products();
grid.getView().bindStore(store);
Alternativamente, también puede usar los métodos load (), loadData (), loadRecords () y copiar los datos en su tienda.