2013-06-12 67 views
0

我遇到以下問題:我的頁面上有兩個kogrids。一個在左邊,一個在右邊。如何防止kogrid自動選擇新增項目,保留當前選擇?

在它們之間我添加了兩個按鈕,以便用戶可以將選定的項目從左側移動到右側,而另一個方向。

因此,我的視圖模型有4個數組,ItemsA,SelectedItemsA,ItemsB和selectedItemsB。因爲跟着兩個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> 

在從左向右移動項目,我將每一個項目從SelectedItemsA推入ItemsB通過:

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