我正在使用带有 Knockout.js 和 datajs 库(用于支持 OData)的 jQWidgets UI 框架来构建我的应用程序的客户端。以及服务器端 ASP.NET Web API2 中的 OData Endpoint。我为 jqWidgets Grid 创建了 ViewModel,如下代码所示:
var vm = function() {
this.items = ko.observableArray();
var self = this;
//qet data from service
OData.read(url,
function success(data, response) {
//convert data to observable array
self.items(data.results);
},
function error(err) {
alert(err.message);
});
this.removeItem = function() {
// remove item
var element = "#jqxgrid";
var cell = $(element).jqxGrid('getselectedcell');
if (cell != null && cell != "") {
var selectedrowindex = cell.rowindex;
};
var item =$(element).jqxGrid('getrowdata', selectedrowindex);
OData.request({
requestUri: url + '(' + item.CompanyID + ')',
method: "DELETE",
},
function success(data, response) {
alert('DELETE successfull');
},
function error(err) {
alert(err.message);
});
};
如您所见,我可以获取和删除项目。我的问题是如何保存所有更改并将刚刚更改的项目发送到服务器。对于服务器端的添加/更新实体,我必须使用适当的 json 对象(而不是对象集合)发送 POST/PUT 请求。因此,例如,如果我想更新所有更改的项目,我必须对每个项目执行 PUT 请求。有什么方法可以检测 observableArray 中的哪些项目被添加/更改并将这些项目中的每一个发送到服务器?