tutorial examples español extjs

examples - extjs gpl



Cómo recuperar la matriz de datos JSON de la tienda ExtJS (14)

¿Hay algún método que me permita devolver los datos almacenados en un Panel de cuadrícula ExtJS exactamente de la manera en que lo cargué usando:

var data = ["value1", "value2"] Store.loadData(data);

Me gustaría tener una opción de usuario para volver a cargar la Grilla, pero los cambios en la tienda deben tenerse en cuenta. El usuario puede realizar cambios y la cuadrícula se actualiza dinámicamente, pero si recargo la cuadrícula, los datos que se cargaron originalmente se muestran aunque la base de datos se haya actualizado con los nuevos cambios. Preferiría no volver a cargar la página y dejar que vuelvan a cargar los datos de la cuadrícula con la tienda que acaba de cambiar.

Supongo que estoy buscando algo como esto:

var data = Store.getData(); //data = ["value1", "value2"]

después de todo esto dicho y hecho. O hay una forma diferente de actualizar la grilla con datos nuevos de los que no tengo conocimiento. Incluso el uso del proxy aún utiliza los datos "originales", no la nueva tienda.


Aquí hay otra forma simple y limpia:

var jsonArr = []; grid.getStore().each( function (model) { jsonArr.push(model.data); });


Como se sugirió anteriormente, intenté debajo de uno con el fracaso.

store.proxy.reader.jsonData

Pero debajo de uno funcionó para mí

store.proxy.reader.rawData


En mi caso, quería una matriz javascript dentada, por ejemplo [["row1Cell1", "row1cell2"], ["row2Cell1", "row2cell2"]] en función del contenido del almacén de grillas Ext.

El javascript como a continuación creará dicha matriz, soltando la clave de identificación en el objeto que no necesitaba.

var tableDataArray = []; Ext.ComponentQuery.query(''[name="table1"]'')[0].store.each(function(record){ var thisRecordArray = []; for (var key in record.data) { if (key != ''id'') { thisRecordArray.push(record.data[key]); } } tableDataArray.push(thisRecordArray); });


Me encontré con problemas compartidos tratando de acceder a los datos de la tienda sin vincularlo a un componente, y la mayor parte se debió a que la tienda se cargó a través de ajax, por lo que tardó en usar el evento de carga para leer los datos. Esto funcionó:

store.load(); store.on(''load'', function(store, records) { for (var i = 0; i < records.length; i++) { console.log(records[i].get(''name'')); }; });


No necesita hacer bucles y recopilar / reprocesar datos. El objeto json que necesitas está aquí:

var jsonData = store.proxy.reader.jsonData;


Prueba esto:

myStore.each( function (model) { console.log( model.get(''name'') ); });


Si desea obtener los datos exactamente como los obtiene Writer (por ejemplo, ignorando los campos con persist:false config), use el siguiente código (Nota: lo probé en Ext 5.1)

var arr = []; this.store.each(function (record) { arr.push(this.store.getProxy().getWriter().getRecordData(record)) });


Siempre uso store.proxy.reader.jsonData o store.proxy.reader.rawData

Por ejemplo, esto devuelve los elementos anidados en un nodo raíz llamado ''datos'':

var some_store = Ext.data.StoreManager.lookup(''some_store_id''); Ext.each(some_store.proxy.reader.rawData.data, function(obj, i){ console.info(obj); });

Esto solo funciona inmediatamente después de una operación de lectura de tienda (mientras no se haya manipulado todavía).


Un enfoque de una línea:

var jsonData = Ext.encode(Ext.pluck(store.data.items, ''data''));

No es muy bonito, pero es bastante corto.


Un mejor enfoque de una línea (IMO), funciona en ExtJS 4, no estoy seguro acerca de 3:

store.proxy.reader.jsonData


Una forma simple de hacer esto es

var jsonArray = store.data.items

Entonces, si tu tienda JSON es

[{"text": "ABC"}, {"text": "DEF"},{"text": "GHI"},{"text": "JKL"}]

Entonces puedes recuperar "DEF" como

jsonArray[1].data.text

En el siguiente código, noté que convierte cada carácter en un elemento de matriz.

var jsonData = Ext.encode(Ext.pluck(store.data.items, ''data''));


Store.getRange() parece ser exactamente lo que estás buscando. Le devolverá Ext.data.Record[] - matriz de registros. Si no se pasan argumentos, se devuelven todos los registros.


function getJsonOfStore(store){ var datar = new Array(); var jsonDataEncode = ""; var records = store.getRange(); for (var i = 0; i < records.length; i++) { datar.push(records[i].data); } jsonDataEncode = Ext.util.JSON.encode(datar); return jsonDataEncode; }


proxy: { type: ''ajax'', actionMethods: { read: ''POST'', update: ''POST'' }, api: { read: ''/bcm/rest/gcl/fetch'', update: ''/bcm/rest/gcl/save'' }, paramsAsJson: true, reader: { rootProperty: ''data'', type: ''json'' }, writer: { allowSingle: false, writeAllFields: true, type: ''json'' } }

Use allowSingle convertirá en matriz