2013-03-23 80 views
2

我正在使用knockout.js库。我试图用敲除arrayRemoveItem实用程序功能,但它似乎没有工作。这里是我的代码:如何删除阵列淘汰项目

JS

function VM() 
{ 
    this.Items = [{id:'1', name:'A'}, 
       {id:'2', name:'B'}, 
       {id:'3', name:'C'}, 
       {id:'4', name:'D'} 
       ]; 

    this.Delete = function(){ 
    console.log(this.Items);   //before removing 

    ko.utils.arrayRemoveItem(this.Items, function(item){ 
     return item.id == '3'; 
    }); 

    console.log(this.Items);   //after removing 
    }; 
} 

Fiddle

如果选中按Delete键后,第3项是不是从阵列拆下控制台。我在这里错过了什么?

回答

8

arrayRemoveItem将需要删除的项目作为第二个参数,如ko.utils.arrayRemoveItem(array, itemToRemove),因此您需要首先找到该对象并将其传递给arrayRemoveItem

尝试

function VM() 
{ 
    this.Items = [{id:'1', name:'A'}, 
       {id:'2', name:'B'}, 
       {id:'3', name:'C'}, 
       {id:'4', name:'D'} 
       ]; 

    this.Delete = function(){ 

    var item; 
    ko.utils.arrayForEach(this.Items, function(v) { 
     if(v.id == '3'){ 
     item = v; 
     } 
    }); 

    console.log(this.Items); 
    ko.utils.arrayRemoveItem(this.Items, item); 
    console.log(this.Items); 
    }; 
} 

ko.applyBindings(new VM()); 

演示:Fiddle

+1

这去除该数组中的项目对我来说,却没有触发观察到,当我改变了arrayRemoveItem为删除功能的阵列,自.availableSecondScreens.remove(itemToDelete) - 可触发被触发 – 2014-08-09 12:13:09

+0

尝试arrayRemoveItem和.remove仍然在我的表中留下一个空行。 – Ian 2016-03-04 12:22:28