2013-06-12 1 views
0

다음과 같은 문제가 있습니다. 내 페이지에 두 개의 kogrid가 있습니다. 하나는 왼쪽에, 하나는 오른쪽에 있습니다.kogrid가 새로 추가 된 항목을 자동으로 선택하여 현재 선택 항목을 유지하는 것을 방지하려면 어떻게해야합니까?

그 사이에 두 개의 버튼이 추가되어 사용자가 선택한 항목을 왼쪽에서 오른쪽으로 그리고 다른 한 방향으로 이동할 수 있습니다.

그래서 내 뷰 모델에는 ItemsA, SelectedItemsA, ItemsB 및 selectedItemsB의 4 개의 배열이 있습니다. 다음으로 두 kogrids가 구성되어 왼쪽에서 오른쪽으로 상품을 옮기는

<div data-bind="koGrid: { 
data: ItemsA, 
selectedItems: SelectedItemsA, 
displaySelectionCheckbox: false, 
enableRowReordering: true, 
enableSorting: false, 
columnDefs: [ 
{ field: 'Name', cellTemplate: tableCellTemplate, cellClass: 'player-row' }, 
    { field: 'ClubName', displayName: 'Mannschaft' }, 
    { field: 'DisplayPosition', displayName: 'Position', cellTemplate: playerPositionNameTemplate} 
], 
footerVisible: false 
}"> 
</div> 

, 난 통해 ItemsB에 SelectedItemsA에서 모든 항목 푸시 것이다

$.each(self.SelectedItemsA(), function(idx, player) { 
    self.ItemsB.push(player); 
}); 

그리고 왼쪽에서 선택 청소 다음을 통해 :

self.ItemsA.removeAll(self.SelectedItemsA()); 

항목은 ItemsB에 묶여있는 오른쪽 그리드에서 올바르게 표시되지만 자동으로 선택됩니다. 따라서 하나의 항목을 다시 이동하려면 먼저 이전에 이동 한 모든 항목의 선택을 취소해야합니다! kogrid가 새로 추가 된 항목을 자동으로 선택하는 것을 방지하려면 어떻게해야합니까?

답변

1

koGrid의 버그입니다. koGrid-2.1.1.debug.js에서

:

self.setRenderedRows = function (newRows) { 
    self.renderedRows(newRows); 
    self.refreshDomSizes(); 
}; 

newRows 당신이 선택/복사 한 행의 배열입니다. koGrid는 그대로 복사합니다. 즉, newRows.selected() (관찰 가능)은 true입니다. 그들은 비전 범위 밖으로 스크롤 한 후

UPDATE

밝혀, 위의 변화는 또한 행-선택을 해제합니다. 하지만 복사하려는 각 행에 대해 __kg_selected__false으로 설정할 수 있다고 생각했습니다.

말 :

ko.utils.arrayForEach(self.SelectedItemsA(), function(player) {  
    player.__kg_selected__ = false;  
}); 

다음 새 배열에 그들 모두를 밀어 :

ko.utils.arrayPushAll(self.ItemsB(), self.SelectedItemsA());