Я пытаюсь удалить объект из ObservableArray после ajax-вызова. Он работает с функцией «.pop», но не тогда, когда я использую пользовательскую функцию knockout.js .remove.Как удалить Knockout.js ObservableArray-объект после ajax-вызова
Если я перехожу к функции «.remove» вне функции ajax-complete, «.remove» работает. Но я действительно предпочел бы его внутри «.complete».
Может ли кто-нибудь определить, что я делаю неправильно?
Это не работает:
self.removeItem = функция (данные) {
$.ajax({
type: 'POST',
url:'/echo/js/?js=hello%20world!',
dataType: 'json',
contentType: 'application/json',
data: null
}).complete(function (item,data) {
self.Items.remove(data);
});
};
Я сделал jsfiddle, чтобы продемонстрировать: http://jsfiddle.net/6oe6dn7n/1/
мой взгляд, модель выглядит так:
var data = {
Name: "Test",
Items: ["One", "Two", "Three"]
};
function ViewModel(data) {
var self = this;
self.Items = ko.observableArray(ko.utils.arrayMap(data.Items,
function(item) {
return { value: ko.observable(item) };
}));
self.removeItem = function(data) {
$.ajax({
type: 'POST',
url:'/echo/js/?js=hello%20world!',
dataType: 'json',
contentType: 'application/json',
data: null
}).complete(function (item,data) {
// This doesn't affect the observableArray.
// 'self.Items.pop(data) does, however.
self.Items.remove(data);
});
};
}
И мой HTML выглядит так:
<div>
<table>
<tbody data-bind="template: { name: 'itemTemplate', foreach: Items }"></tbody>
</table>
</div>
<script type="text/html" id="itemTemplate">
<tr>
<td>
<input data-bind="value: value" />
<a href="#" data-bind="click: $parent.removeItem">Remove Item</a>
</td>
</tr>
</script>