Версия Dojo: 1.7.2
У меня есть DataGrid, который заполнен данными из MemoryStore.Он работает нормально, но данные в сетке не обновляются при обновлении объектов в магазине.
это то, как сетка и магазин связаны:
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" );
и у меня естьфункция, которая обновляет данные в хранилище:
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);
});
}
} );
} );
}
, если хранилище пусто при запуске этой функции, элементы будут показаны в DataGrid
, но как только элементы окажутся в сетке, они не получатобновлено.Это тестовая система, часть объекта формы изменяется при каждом вызове.
В итоге я изменил метод на сервере, чтобы он всегда возвращал все элементы, а затем функция javascript выглядит следующим образом:
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 );
}
} );
} );
}
, это также работает.Выбор сохраняется, и DataGrid не мигает.но это отчасти побеждает цель.
Я нашел эту статью , но не мог понять этого.Я много чего перепробовал и ничего не получалось.В этой статье вместо нового dojo.on
используется старый синтаксис dojo.connect
.
Я уверен, что где-то просто не хватает детали.
Спасибо за помощь.