/ / actualizar DataGrid cuando JsonRestStore tiene nuevos datos - dojox.grid.datagrid, dojo

actualizar DataGrid cuando JsonRestStore tiene nuevos datos - dojox.grid.datagrid, dojo

La versión de Dojo es 1.7.2

Tengo un DataGrid que está lleno de datos de un MemoryStore. Funciona bien, pero los datos en la cuadrícula no se actualizan cuando los objetos se actualizan en la tienda.

Así es como se conectan la grilla y la tienda:

formStore = Observable(new MemStore());
formGrid = new DataGrid( {
store:ObjectStore( {objectStore:formStore} ),
query:{id:"*"},
structure:[
{ name:" ", field:"pending", width:"2em",
formatter:function ( count, rowIdx, cell ) {
return "<div style="font-size: smaller; text-align: right;">" + count + "</div>";
}
},
{ name:" ", field:"name", width:"auto",
formatter:function ( formName, rowIdx, cell ) {
return "<div style="white-space: nowrap;">" + formName + "</div>";
}
}
]

}, "formGrid" );

y tengo una función que actualiza los datos en la tienda:

function updateForms() {
require( ["dojo/_base/xhr", "dojo/_base/array", "dojox/grid/DataSelection"],
function ( xhr, array, DataSelection ) {
xhr.get( {
url:"services/jsonrest/form/",
content:{ id:"all" },
handleAs:"json",
load:function ( forms, io ) {
array.forEach( forms, function( form, idx ) {
formStore.notify(form, form.id);
});
}
} );
} );
}

si la tienda está vacía cuando se ejecuta esta función, los elementos se mostrarán en la DataGrid pero una vez que los elementos están en la cuadrícula, no se actualizan. Este es un sistema de prueba, parte del objeto Formulario cambia en cada llamada.

Lo que terminé haciendo es cambiar el método en el servidor para devolver todos los elementos todo el tiempo y luego la función javascript es así:

function updateForms() {
require( ["dojo/_base/xhr", "dojo/_base/array", "dojox/grid/DataSelection"],
function ( xhr, array, DataSelection ) {
xhr.get( {
url:"services/jsonrest/form/",
content:{ id:"all" },
handleAs:"json",
load:function ( forms, io ) {
// reset all the items in the DataGrid
formGrid.setItems( forms );
}
} );
} );
}

Esto también funciona. La selección se mantiene y el DataGrid no parpadea. pero de alguna manera derrota el propósito.

encontré esto artículo pero no podía darle sentido. Probé muchas cosas y nada funcionó. En este artículo el viejo dojo.connect Se usa la sintaxis en lugar de la nueva dojo.on.

Estoy seguro de que solo falta un detalle en alguna parte.

Gracias por tu ayuda.

Respuestas

0 para la respuesta № 1

En la última versión del dojo, el público refresh() Se ha eliminado el método de DataGrid. Puedes acceder a la miembro privado mediante el usoformGrid._refresh().

Tenga en cuenta que deben haber eliminado la función pública por alguna razón y esto va en contra de la filosofía de OOPS.

Como consejo general, en circunstancias donde no se puede encontrar otra solución, intente escribir formGrid. en el modo de una sola línea de la consola de firebug. Cuando escribe el .obtiene una lista de todos los miembros y propiedades del objeto en cuestión, incluidos todos los públicos (normalmente no _ al principio) y todos los privados (normalmente, _ al principio).

Si no funciona en firebug, pruebe la excelente consola en Chrome.