Javascript KnockoutJS从可观察数组中移除项。Item是ul中的listitem,由foreach生成

Javascript KnockoutJS从可观察数组中移除项。Item是ul中的listitem,由foreach生成,javascript,knockout.js,Javascript,Knockout.js,使用KnockoutJS,如何从可观察数组中删除项?我希望能够单击listitem,并从数组中删除该项(从而从列表中删除) 下面的代码示例报告:“this.experties未定义” 我是否需要定义某种类型的专家对象,然后从内部调用它 <ul data-bind="foreach: expertise"> <li data-bind="text: Key, click: $parent.removeExpertise"></li> </ul>

使用KnockoutJS,如何从可观察数组中删除项?我希望能够单击listitem,并从数组中删除该项(从而从列表中删除)

下面的代码示例报告:“this.experties未定义”

我是否需要定义某种类型的专家对象,然后从内部调用它

<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>
$(函数(){ 函数AppViewModel(){ this.removeExpertise=函数(专业技能){ 本.专业知识.删除(专业知识); }; 这是可以观察到的([ {键:'Charles',值:'Charlesforth'}, {键:'Denise',值:'Dentiste'} ]); } //激活knockout.js jQuery(文档).ready(函数(){ 应用绑定(新的AppViewModel()); }); });
当您从子级调用方法时,
将设置为子级而不是
$parent

有许多方法可以确保调用
removeExpertise
时使用
this
的适当值。一个简单的方法是使用
.bind

它看起来像:

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

此外,您还希望
专业技能
成为
可观察的
而不是
可观察的
,因为
可观察的
公开了数组操作方法,包括
删除
函数。

绑定做什么?他们的文档中到处都是bind这个词,所以我可能忽略了它。bind返回一个新函数,该函数封装了原始函数,并使用“this”的一致值调用它。在这种情况下,您希望它始终使用
AppViewModel
的实例作为
this
。希望有意义。这会很好:viewModel.items.remove(“id”,1);viewModel.items.remove(“name”、“Jim”);viewModel.items.remove(someObject);我们不能这样称呼它-