1

我有一个以文件名和复选框为列的剑道网格。每行都有一个文件名和复选框。我想删除在单击按钮时检查的行。

我在 onclick 函数中使用了以下代码。

$.each(grid.dataSource.view(), function () {
                var currentDataItem = grid.dataItem(grid.select());
                var dataRow = grid.dataSource.getByUid(currentDataItem.uid);
                grid.dataSource.remove(dataRow);

            });

但是,我得到一个 javascript 异常,例如,uid 未定义。请帮助我摆脱这种情况。

编辑:能够逐行删除。无法一次删除多行。此外,当我在删除后再次使用剑道上传上传时,之前删除的所有文件都会一次上传。

谢谢曼尼坎丹

4

2 回答 2

2
/Iterate through all the tr in grid
$.each(grid.find('tr'), function (item,index) {
           //check if the tr has a checked checkbox, you can be more specific here if you have multiple checkboxes in tr.
           if(item.children('input[type=checkbox].is(':chekced'))
           { 
            grid.dataSource.remove(item);
            }
        });

我想分享的几件事:

  1. 如果不循环遍历网格数据/视图/行,则不能一次删除多行
  2. 删除任何一行,不需要挖datasource获取dataItem,直接根据'tr'(DOM元素)删除即可
  3. 如果它说 Uid 未定义,请检查渲染网格的来源,它必须具有附加到每个 tr 的“data-uid”属性。如果没有,您没有正确指定模态。
  4. 删除后如果仍然上传更改,您可以在网格数据源上调用 saveChanges 方法来冻结您所做的更改。
于 2014-04-12T04:32:04.057 回答
1

三个问题:

如果您进行迭代grid.dataSource.view(),您将只找到网格当前页面中的那些元素。如果要遍历表的所有元素,则可以grid.dataSource.data()改用。

迭代你不需要select一行,因为你的函数中已经有了信息。例如,如果你这样做:

$.each(grid.dataSource.view(), function(idx, elem) {
    console.log("item with index " + idx + " is ", elem);
})

然后elem是 row 上的项目idx

最后但并非最不重要的一点是,当您从头开始迭代数组时,您无法删除元素,因为有两个连续的元素要删除,您将删除第一个,然后递增计数器以继续下一个然后第二个实际上现在位于第一个的位置,因此将被跳过。

示例:如果您有以下代码:

var array = [3, 2, 1, 5, 6, 4];
console.log("before", array);
$.each(array, function(idx, elem) {
    if (elem >= 5) {
        array.splice(idx, 1);
    }
});
console.log("after", array);

它将显示:

before [3, 2, 1, 5, 6, 4] 
after [3, 2, 1, 6, 4] 

6没有删除有值的元素!!!

相反,您应该从头开始:

var array = [3, 2, 1, 5, 6, 4];
console.log("before", array);
var len = array.length;
while (len--) {
    if (array[len] >= 5) {
        array.splice(len, 1);
    }
}
console.log("after", array);

结果:

before [3, 2, 1, 5, 6, 4] 
after [3, 2, 1, 4] 

所以,你的代码应该是:

var array = grid.dataSource.data();
var len = array.length;
while (len--) {
    if (...) { // the condition for checking if the item has the checkbox ticked
        grid.dataSource.remove(array[len]);
    }
}
于 2013-06-14T22:01:00.920 回答