アプリのクライアント側を構築するために、Knockout.js と datajs ライブラリ (OData をサポートするため) を備えた jQWidgets UI フレームワークを使用しています。サーバー側の ASP.NET Web API2 の OData エンドポイント。以下のコードのように、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 のどのアイテムが追加/変更されたかを検出し、それらの各アイテムをサーバーに送信する方法はありますか??