Чтобы иметь возможность выдвигать обновления на стороне сервера, вы должны переопределить _saveCustom()
или _saveEverything()
. Вот фрагмент кода (немного очищенный), который я использую, чтобы сохранить обновление.
Обратите внимание, что приведенный ниже код основан на закрытом _getModifiedItems()
, поскольку DataGrid принимает встроенные выпуски. Если вы знаете список измененных элементов (поскольку издание выполняется во всплывающем окне и вы храните ключ элемента где-то), получить измененный элемент проще.
module.submitUpdates = function() {
var store = <from a variable local to the module>
if (store.isDirty() confirm("Updates to be persisted. Continue?")) {
store._saveCustom = function(saveCompleteCallback, saveFailedCallback) {
var modifiedItem = _getModifiedItems(store)[0];
dojo.xhrPost( {
headers: { "content-type": "application/json; charset=utf-8" },
content: dojo.toJson(modifiedItem),
handleAs: "json",
load: function(response) {
if (response !== null && response.success) {
saveCompleteCallback();
}
else {
saveFailedCallback(response);
}
},
error: saveFailedCallback,
url: "/API/<Object>"
});
};
store.save( {
onComplete : function() {
module.loadCachingRuleList();
},
onError : function(errorData, request) {
_reportUpdateFailure(errorData, errMsg);
}
});
}
};
Вот код, который я использую, чтобы получить все обновленные элементы, когда пользователь собирается потерять обновленную DataGrid (потому что он покидает страницу или потому что он хочет обновить содержимое сетки).
Обратите внимание, что следующий код использовал Dojo 1.3. Я не проверял, проще ли с Dojo 1.4 ... Я надеюсь, что dojo.Stateful, который будет представлен в Dojo 1.5, упростит его, иначе нам придется ждать Dojo 1.6;)
var _getModifiedItems = function(store) {
var modifiedItems = [];
if (store !== null && store._pending !== null) {
if (store._pending._modifiedItems !== null) {
for (var modifiedItemKey in store._pending._modifiedItems) {
if (store._itemsByIdentity) {
modifiedItems.push(store._itemsByIdentity[modifiedItemKey]);
}
else {
modifiedItems.push(store._arrayOfAllItems[modifiedItemKey]);
}
}
}
if (store._pending._newItems !== null) {
for (var modifiedItemKey in store._pending._newItems) {
if (store._itemsByIdentity) {
modifiedItems.push(store._itemsByIdentity[modifiedItemKey]);
}
else {
modifiedItems.push(store._arrayOfAllItems[modifiedItemKey]);
}
}
}
}
return modifiedItems;
};
var _getDeletedItems = function(store) {
var deletedItems = [];
if (store !== null && store._pending !== null && store._pending._deletedItems !== null) {
for (var deletedItemKey in store._pending._deletedItems) {
if (store._itemsByIdentity) {
deletedItems.push(store._itemsByIdentity[deletedItemKey]);
}
else {
deletedItems.push(store._arrayOfAllItems[deletedItemKey]);
}
}
}
return deletedItems;
};
Надеюсь, это поможет,
A +, Dom