まず、dojox.data.dataGrid のデータを xhrPosted にしてから xhrGeted にする必要がある場合にのみ、_saveEverything を使用します。
次のように定義するとします。 store._saveEverything = saveCompleteCallback;
追加の saveSuccess() および saveFail() 関数を saveCompleteCallback() で再度呼び出す必要があるため、saveCompleteCallback(saveSuccess, saveFail, storeData) の 1 番目と 2 番目のパラメーターを含める必要があることがわかりました。例えば
// When you wanna upload datagrid, you click upload button
Store.save({ onComplete : saveSuccess, onError : saveFail });
// Definition of saveCompleteCallback
function saveCompleteCallback(saveSuccess, saveFail, storeData) {
dojo.xhrpost(
url: posturl,
postData:storeData,
load: function(data) {
// saveSuccess() must be invoked here again,
// otherwise this function will not be called
saveSuccess();
}
);
}
function saveSuccess() {
dataGrid = dijit.byId('YOUR DATAGRID ID');
dojo.xhrGet(
url: geturl,
load: function(date){
// The reason that a new xhrGet is called is db data is updated
// So the dataGrid will have no value after xhrPost
var store = new dojo.data.ItemFileWriteStore({data: data});
store._saveEverything = saveEverything;
store.clearOnClose = true;
store.urlPreventCache = true;
dataGrid.setStore(store);
}
);
}