Javascript KnockoutJS从可观察数组中移除项。Item是ul中的listitem,由foreach生成
使用KnockoutJS,如何从可观察数组中删除项?我希望能够单击listitem,并从数组中删除该项(从而从列表中删除) 下面的代码示例报告:“this.experties未定义” 我是否需要定义某种类型的专家对象,然后从内部调用它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>
<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);我们不能这样称呼它-?