KnockoutJS удаляет элемент из наблюдаемого массива. Элемент является listitem внутри ul, который был создан foreach
Использование KnockoutJS, как я могу удалить элемент из наблюдаемого массива? Я хочу, чтобы иметь возможность щелкнуть по элементу listitem и удалить элемент из массива (и, следовательно, список).
Ниже приведен пример кода ниже: 'this.expertise is undefined'.
Нужно ли мне определять какой-то объект экспертизы, а затем называть его внутри?
<ul data-bind="foreach: expertise">
<li data-bind="text: Key, click: $parent.removeExpertise"></li>
</ul>
<script type="text/javascript">
$(function () {
function AppViewModel() {
this.removeExpertise = function (expertise) {
this.expertise.remove(expertise);
};
this.expertise = ko.observable([
{ Key: 'Charles', Value: 'Charlesforth' },
{ Key: 'Denise', Value: 'Dentiste' }
]);
}
// Activates knockout.js
jQuery(document).ready(function () {
ko.applyBindings(new AppViewModel());
});
});
</script>
Ответы
Ответ 1
Когда вы вызываете метод из дочернего объекта, this
будет установлен как дочерний, а не $parent
.
Существует много способов гарантировать, что removeExpertise
вызывается с соответствующим значением для this
. Простым способом является использование .bind
.
Он будет выглядеть так:
this.removeExpertise = function (expertise) {
this.expertise.remove(expertise);
}.bind(this);
Кроме того, вам понадобится expertise
observableArray
, а не observable
, поскольку observableArray
предоставляет методы манипуляции массивами, включая функцию remove
.