Я пытался связать свои данные с нокаутом js. У меня есть кнопка для добавления элемента в наблюдаемый массив, который эффективно обновляет таблицу. И для каждой строки у меня кнопка удаления, проблема в том, что я могу сначала удалить элемент, а затем обновить таблицу. После этого кнопка удаления не работает. Если я добавлю элемент и щелкнув, чтобы удалить какой-либо другой элемент, то удаление, похоже, не работает. Странно, если я сортирую или просматриваю таблицу (то есть обновляю ее), удаление кажется работающим во второй раз.knockout datatable binding with remove element
Вот мой код
<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/
Пожалуйста, помогите ....
Использование 'this' в вашей модели может быть любопытной ошибкой ... оно может ссылаться на объект окна в некоторых случаях внутри функций. Рассмотрите возможность назначения другой переменной (например, 'var self = this;') и переписывая все 'this.' на' self.' – deostroll