Подтвердить что ты не робот

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>
4b9b3361

Ответ 1

Когда вы вызываете метод из дочернего объекта, this будет установлен как дочерний, а не $parent.

Существует много способов гарантировать, что removeExpertise вызывается с соответствующим значением для this. Простым способом является использование .bind.

Он будет выглядеть так:

this.removeExpertise = function (expertise) {
    this.expertise.remove(expertise);
}.bind(this);

Кроме того, вам понадобится expertise observableArray, а не observable, поскольку observableArray предоставляет методы манипуляции массивами, включая функцию remove.