Dojoバージョンは1.7.2です
MemoryStoreからのデータで満たされたDataGridがあります。正常に動作しますが、ストアでオブジェクトが更新されてもグリッド内のデータは更新されません。
これは、グリッドとストアの接続方法です。
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
が、アイテムがグリッドに入ると更新されません。これはテストシステムであり、Formオブジェクトの一部は呼び出しごとに変更されます。
私がやったことは、サーバー上のメソッドを変更して常にすべてのアイテムを返すようにすることです。そうすると、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.connect
では、新しいの代わりに古い構文が使用されていますdojo.on
。
どこかに細部が欠けていると確信しています。
ご協力ありがとうございました。