我有以下问题:我的页面上有两个kogrids。左边一个,右边一个。
在它们之间我添加了两个按钮,以便用户可以从左侧向右侧移动选定的项目,反之亦然。
因此我的视图模型有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());
它们的项目将正确显示在与项目B绑定的右侧网格中,但它们会自动选中。因此,如果我想要移回一个项目,我首先必须取消选择之前移动的所有项目!如何防止kogrid自动选择新添加的项目?
答案 0 :(得分:1)
它是koGrid中的一个错误。
在koGrid-2.1.1.debug.js中:
self.setRenderedRows = function (newRows) {
self.renderedRows(newRows);
self.refreshDomSizes();
};
newRows是您选择/复制的行数组。
koGrid按原样复制它们,这意味着newRows.selected()
(可观察的)是true
。
<强>更新强>
事实证明,上述更改也会在滚动出视野范围后取消选择行。但我想你可以为要复制的每一行设置__kg_selected__
到false
。
说:
ko.utils.arrayForEach(self.SelectedItemsA(), function(player) {
player.__kg_selected__ = false;
});
然后将它们全部推送到新数组:
ko.utils.arrayPushAll(self.ItemsB(), self.SelectedItemsA());