データテーブルをノックアウト js にバインドしようとしています。テーブルを効率的に更新する observableArray に要素を追加するためのボタンがあります。行ごとに削除ボタンがありますが、問題は、最初にアイテムを削除してからテーブルを更新できることです。その後、削除ボタンは機能しません。アイテムを追加し、クリックして他のアイテムを削除すると、削除が機能していないようです。奇妙なことに、テーブルを並べ替えたり検索したりすると (更新を意味します)、削除が 2 度目に機能するように見えます。
これが私のコードです
<script id="sample2RowTemplate" type="text/html">
<td> <label data-bind="text: Id" /></td>
<td> <input type="text" data-bind="value: Title" /></td>
<td> <input type="text" data-bind="value: Price" /></td>
<td><a data-bind="click: function() { vm.removeGift($data); }">Remove</a></td>
</script>
と:
var initialData = [{
Id: 1,
Title: 'Star Wars Blue Ray',
Price: '90.00'}];
var initCounter = 1;
//define record class
function GiftRecord(id, title, price) {
this.Id = ko.observable(id);
this.Title = ko.observable(title);
this.Price = ko.observable(price);
}
//map the records
var mappedData = ko.utils.arrayMap(initialData, function(item) {
return new GiftRecord(item.Id, item.Title, item.Price);
});
//Build viewModel
function viewModel() {
this.gifts = ko.observableArray(mappedData);
this.addGift = function() {
initCounter += 1;
var title = $("#newTitle").val();
var price = $("#newPrice").val();
var rec = new GiftRecord(initCounter, title, price);
this.gifts.push({
Id: rec.Id,
Title: rec.Title,
Price: rec.Price
});
};
this.removeGift = function(gift) {
this.gifts.remove(function(item2) {
return gift.Id == item2.Id;
});
};
this.testUpdate = function() {
this.gifts()[0].Title("test123");
};
this.save = function() {
ko.utils.postJson(location.href, {
gifts: ko.toJS(this.gifts()),
guid: giftsSignalR.guid
});
};
}
vm = new viewModel();
//Bind viewModel to HTML
$(function() {
ko.applyBindings(vm, $("#sample2")[0]);
});
基本的にはhttp://jsfiddle.net/bdetchison/b4SsE/と同じです。
助けてください....