0

我有以下问题:我的页面上有两个 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());

它们的项目将正确显示在以 ItemsB 为界的右侧网格中,但它们会被自动选中。因此,如果我想将单个项目移回,我首先必须取消选择我之前移动的所有项目!如何防止 kogrid 自动选择新添加的项目?

4

1 回答 1

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());
于 2013-06-12T12:37:44.550 回答