2013-12-20 53 views
0

我正在使用本地存儲作爲基於Kendo代碼庫樣本的數據存儲的應用程序。我們目前正在計劃使用數據源中的函數來操縱數據。你可以在下面看到我們的代碼的一部分。 我有一個工作示例http://jsfiddle.net/photo_tom/fL5UC/2/Kendo Grid沒有正確更新顯示

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運行按鈕,則數據將正確顯示。

我是新來的使用這些網格,我沒有看到是什麼導致問題。

回答

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/

1

當添加一個新的記錄到網格,你需要離開ID字段設置爲默認值(不要讓用戶編輯),並在分配其獨特的價值運輸公司的create函數,它應該只提供創建的記錄作爲參數options.success。因此類似於:

create: function (options) { 
    options.data.ID = getNextID(); 
    var localData = JSON.parse(localStorage["grid_data"]); 
    localData.push(options.data); 
    localStorage["grid_data"] = JSON.stringify(localData); 
    options.success(options.data); 
}, 
0

您遇到的問題是因爲您正在以整個數據集作爲參數調用options.success。對於創建和更新,您只需要返回更新的對象,如options.data對象中一樣。

options.success(options.data); 

查看更新的樣本http://jsfiddle.net/photo_tom/fL5UC/2/

無需再次調用read的數據源,只是options.success更新/創建的對象,它會正確地行事。