2014-04-15 3 views
0

knockout.js 2.3.0을 사용하고 있고 동적으로 추가 된 행을 가진 표와 각 행에 선택 목록이 있습니다. 날짜 입력을 변경하면 선택 목록이 다른 내용으로 채워집니다. 서로 다른 날짜가 다른 내용으로 목록을 채우므로 내용이 정확하지 않을 수 있기 때문에 이전에 추가 된 행을 제거하려고합니다.Knockout.js에서 동적으로 생성 된 행 삭제

내가 갖고있는 문제는 모든 행이 제거되지 않는다는 것입니다. 예 : 4 개 이상의 행이있는 경우 항상 2 개가 남아 있습니다. 모든 행이 지워지는 유일한 시간은 시작 행이 하나 뿐인 경우입니다. 여기

은 행

self.date.subscribe(function() { 

    //I also tried setting the loop length to a very long number but the same results happened each time 
    for (i = 0; i < self.customers().length; i++){ 
     self.customers.remove(self.customers()[i]); 
    } 

    //now populate the select list and add an empty row - commented out for testing to make sure rows are being deleted 
    //setCustomerList(self.date()); 
    //self.customers.push(new AddCustomer(self.customerList[0])); 
}); 

난 그냥 무슨 일이 일어날 지보고 테스트되었고, 나는 제거하기 위해 모든 행을받은 적이있는 유일한 방법은 루프 다중를 추가하는 것입니다을 삭제하는 구독 기능의 어떤 명백하게 바람직하지 않다.

동적으로 추가 된 모든 행을 제거하는 간단한 방법이 있습니까?

답변

2

당신이 관찰 배열에있는 모든 항목을 제거하려면이의 removeAll 방법을 사용 : 당신이 정말 루프를 사용하려면

self.customers.removeAll(); 

을, 당신은 지속적으로 마지막을 제거함으로써 그렇게 할 수있다 (또는 첫 번째) 항목이 남아 있지 않을 때까지 :

while (self.customers().length) { 
    self.customers.pop(); 
} 
+0

Jeez, 너무 쉬웠다. 고맙습니다. – user1104854

1

for 루프를 뒤집어서 아래에서 항목을 제거해야한다고 생각합니다. 귀하의 코드 문제는 항목이 제거 될 때마다 배열의 길이가 변경된다는 것입니다.

self.date.subscribe(function() { 
    var customerLength = self.customers().length 
    for (i = customerLength ; i >= 0; i = i - 1){ 
     self.customers.remove(self.customers()[i]); 
    } 
}); 
+0

네가 맞아, 내가 어떻게 그걸 놓쳤는지 모르겠다. 그러나 removeAll()이 존재한다는 것을 알지 못하기 때문에 위의 대답을 수락했습니다. 당신의 도움을 주셔서 감사합니다! – user1104854

+0

감사합니다. 나는 @Michael Best의 대답도 좋아한다. :) –

관련 문제