2013-06-12 52 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());