如何防止栅格自动选择新添加的项目,保留当前选择
How to prevent kogrid to automatically select newly added items, preserving current selection?
我有以下问题:我的页面上有两个网格。一个在左边,一个在右边
在它们之间,我添加了两个按钮,这样用户就可以将选中的项目从左边移动到右边,或者从右边移动到左边。
因此我的视图模型有4个数组,ItemsA, SelectedItemsA, ItemsB和selectedItemsB。两个栅格的配置如下:
<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的右边网格中,但是它们是被自动选中的。因此,如果我想要移动一个项目,我首先必须取消选择之前移动的所有项目!如何防止kgrid自动选择新添加的项目?
这是koGrid的一个bug。
在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());
相关文章:
- 在边栏中动态选择项目
- 如果选择了其他选择项目,则隐藏选择项目
- 在 for 循环中选择项目
- 使用ajax/javascript选择项目并将其添加回mysql
- 使用自动完成功能未正确选择项目
- 从laravel 5中的下拉框中选择项目时,应更改隐藏的输入值
- AngularJS下拉列表在选择项目后丢失内容
- 如何从集合中随机选择项目
- 如何在选择项目时使用 ajax 将数据提取到输入字段中
- 检查是否未从下拉列表中选择项目
- 如何使用 jquery 在多组列表框中选择项目
- 选择项目时,kendoListView 更改事件会触发两次
- 无法使用 jQuery .select2 选择项目
- 用于使用 Tab 键选择项目的事件
- 在下拉框中选择项目时更改文本框值
- Jquery - 按 ID 选择项目不起作用
- 使用哈希标记从下拉列表中预先选择项目
- 从下拉列表中选择项目后,显示新选项并显示文本
- 选择项目并一次显示n篇文章
- 有效的javascript算法,用于从数组中选择项目,其中每个条目具有不同的权重