MVC 4 と Knockout.js で計算された observableArray を使用して編集可能なグリッドを作成しようとしています。配列が最初にロードされたとき、computed() メソッドが呼び出されますが、ユーザーの編集によってグリッド上のデータが変更されたときは呼び出されません。
ビューモデル:
function CarsVm() {
var self = this;
self.url = 'http://localhost/FederatedWcf/Services/RestCars.svc/json/cars';
self.cars = ko.observableArray([]);
self.car = ko.computed(function () {
if ( this.cars().length > 0)
return this.cars()[this.cars().length-1].Make;
else {
return "";
}
}, this);
self.GetCars = function () {
var count = 0;
$.getJSON(self.url, function (allData) {
var mappedCars = $.map(allData.JsonCarsResult, function (item) {
console.log(count);
console.log(item);
count = count + 1;
return new Cars(item);
});
self.cars(mappedCars);
console.log(self.cars());
});
$.ajaxSetup({ cache: false });
};
}
そしてhtmlフラグメント:
<table>
<thead>
<tr>
<th></th>
<th>Year</th>
<th>Make</th>
<th>Model</th>
<th></th>
</tr>
</thead>
<tbody data-bind="foreach: cars">
<tr>
<td><span style="display:none" data-bind="text:Id"></span></td>
<td><input data-bind="value:Year"></input></td>
<td><input data-bind="value:Make"></input></td>
<td><input data-bind="value:Model"></input></td>
<td><button data-bind="click: $root.removeCar">-</button></td>
</tr>
</tbody>
</table>
<span data-bind="text:car"></span>
グリッド内の最後の Make を編集すると、データ バインドされた car 要素が更新されることを期待していましたが、そうではありません。
ノックアウトobserverableArrayで、onblurイベント中など、グリッドの変更を検出するにはどうすればよいですか?