Kendo Grid无法正确更新显示

时间:2013-12-20 03:41:23

标签: kendo-ui

我正在开发一个应用程序,我们使用本地存储作为基于Kendo代码库样本的数据存储。我们目前正计划使用数据源中的函数来操作数据。你可以在下面看到我们代码的那部分内容。 我在http://jsfiddle.net/photo_tom/fL5UC/2/处有一份工作样本。

 var dataSource = new kendo.data.DataSource({
     transport: {
         create: function (options) {
             var localData = JSON.parse(localStorage["grid_data"]);
             localData.push(options.data);
             localStorage["grid_data"] = JSON.stringify(localData);
             options.success(localData);
         },
         read: function (options) {
             var localData = JSON.parse(localStorage["grid_data"]);
             options.success(localData);
         },
         update: function (options) {
             var localData = JSON.parse(localStorage["grid_data"]);
             for (var i = 0; i < localData.length; i++) {
                 if (localData[i].ID == options.data.ID) {
                     localData[i].Value = options.data.Value;
                 }
             }
             localStorage["grid_data"] = JSON.stringify(localData);
             options.success(localData);
             console.log("On update");
             console.log(localData);
         },
         destroy: function (options) {
             var localData = JSON.parse(localStorage["grid_data"]);
             localData.remove(options.data.ID);
             localStorage["grid_data"] = JSON.stringify(localData);
             options.success(localData);
         }

要查看问题:

  1. 点击“添加新记录”。新记录将显示为网格中的第一条记录
  2. 在ID列中输入一个数字,在值列中输入任何文本。
  3. 点击“保存更改”按钮。
  4. 原始第一行是什么,将覆盖新添加的行
  5. 如果单击JSFiddle运行按钮,则数据将正确显示。
  6. 我是使用这些网格的新手,我不知道导致问题的原因。

3 个答案:

答案 0 :(得分:1)

向网格添加新记录时,您需要将ID字段设置为其默认值(不要让用户编辑它),并在传输的{{1}中分配其唯一值然后,函数应该只将创建的记录作为参数提供给create。如下所示:

options.success

答案 1 :(得分:0)

我已经在下面更新了演示。

create: function (options) {
                 var localData = JSON.parse(localStorage["grid_data"]);
                 localData.push(options.data);
                 localStorage["grid_data"] = JSON.stringify(localData);
                 options.success(localData);
                 console.log("On create");
                 console.log(localData);
                 $("#grid").data('kendoGrid').dataSource.read();
             }

http://jsfiddle.net/fL5UC/3/

答案 2 :(得分:0)

您遇到的问题是因为您将整个数据集作为参数调用options.success。对于创建和更新,您只需返回更新的对象,如options.data对象。

options.success(options.data);

请参阅更新后的示例http://jsfiddle.net/photo_tom/fL5UC/2/

无需再次调用数据源上的read,只需选择options.success更新/创建的对象,它就会正常运行。

相关问题