2013-03-23 2 views
2

knockout.js 라이브러리를 사용하고 있습니다. 나는 녹아웃 arrayRemoveItem 유틸리티 기능을 사용하려고 노력하고 있지만 그것이 작동하지 않는 것 같습니다. 당신이 삭제 버튼을 누른 후, 항목 3 배열에서 제거되지 않고 콘솔을 선택하면배열 녹아웃에서 항목을 제거하는 방법

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

: 여기 내 코드입니다. 여기서 내가 무엇을 놓치고 있니?

답변

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()); 

데모 :이 나를 위해 배열에서 항목을 제거하지만 배열 자체에 제거 기능에 arrayRemoveItem를 변경할 때, 관찰을 유발하지 않았다

+1

Fiddle .availableSecondScreens.remove (itemToDelete) - 관측 대상이 트리거되었습니다. –

+0

arrayRemoveItem 및 .remove를 시도해도 테이블에 빈 행이 남아 있습니다. – Ian

관련 문제