0

set使用KendoUI 网格修改元素会删除选择。

如果 a 将 KendoUIDataSource定义为:

var dataSource = new kendo.data.DataSource({
    data    : [
        { "id": 1, "item": "item1", "value": "foo" },
        { "id": 2, "item": "item2", "value": "foo" },
        { "id": 3, "item": "item3", "value": "foo" },
        { "id": 4, "item": "item4", "value": "foo" }
    ],
    pageSize: 5
});

grid作为:

var grid = $("#grid").kendoGrid({
    dataSource: dataSource,
    columns   : [
        { field: "item", title: "Item" },
        { field: "value", title: "Value" }
    ],
    selectable: "row"
}).data("kendoGrid");

如果我连续单击(选择它),然后使用以下代码更新模型:

dataSource.data()[0].set("value", "bar");

选择会丢失。

JSFiddle 中的示例代码在这里

指示:

  1. 选择任意行。
  2. 单击用于更改value第一行的按钮。

更新本地时有什么方法可以保留选择DataSource吗?

4

2 回答 2

2

当数据源的更改事件发生时,这是预期的行为,网格会做出反应并重新绘制。您可以像这样默默地更新字段:

dataSource.data()[0].value = "bar";

但是,这不会触发更改事件,并且网格也不会更新。

要在“刷新”之间保留对 Grid 的选择,您可以使用代码库文章中介绍的方法。您可以将它们存储在 cookie 中或内存中,这取决于您。

问候

于 2013-01-15T01:07:25.947 回答
0

我能够找到一个非常相似的问题的解决方案。我尝试在修改选定行后选择下一行,但更新数据项清除了选择。

诀窍是保存data-uid要选择的元素。更新后,我只需按 uid 选择元素。

var selected = grid.select();
var next = selected.next();
var nextUid = next.data("uid");
var dataItem = grid.dataItem(selected);
if (dataItem) {
    dataItem.set("value", dataItem.get("value") - 1);
    if (next.length)
        grid.select($("#grid").find("*[data-uid='" + nextUid + "']"));
}

你可以在这里试试。

于 2014-08-22T12:33:12.410 回答