2013-05-14 79 views
10

在Kendo UI Datasource中遇到了一個相當惱人的bug(?)。Kendo Datasource運輸自定義函數沒有被調用

當我傳遞一個自定義函數時,我的傳輸方式上的更新方法沒有被調用,但是如果我只是給它一個URL,它就會工作。

這工作:

... 
transport: { 
    update: { url: "/My/Action" } 
} 
... 

這不

... 
transport: { 
    update: function(options) { 
     var params = JSON.stringify({ 
      pageId: pageId, 
      pageItem: options.data 
     }); 
     alert("Update"); 
     $.ajax({ 
      url: "/My/Action", 
      data:params, 
      success:function(result) { 
       options.success($.isArray(result) ? result : [result]); 
      } 
     }); 
    } 
} 
... 

的功能沒有得到調用,而是一個AJAX請求到當前頁面的URL造的,模型數據被公佈,這很奇怪。聽起來像是一個bug。

我需要這個的唯一原因是,因爲Kendo無法弄清楚,我的更新操作只返回一個元素,而不是數組 - 因此,我不想彎曲我的API只是爲了滿足劍道,雖然我會以相反的方式去做。

有沒有人遇到過這種情況,可以指出我正確的方向?

我也嘗試過使用schema.parse,但是當Update方法被調用時沒有被調用。我使用myDs.sync()來同步我的數據源。

+0

我有同樣的問題,如果不知道它是固定的... – SamJackSon 2014-05-14 09:03:58

回答

15

按預期工作從documentation演示:

var dataSource = new kendo.data.DataSource({ 
    transport: { 
     read: function(options) { 
     $.ajax({ 
      url: "http://demos.kendoui.com/service/products", 
      dataType: "jsonp", 
      success: function(result) { 
      options.success(result); 
      } 
     }); 

     }, 
     update: function(options) { 
     alert(1); 
     // make JSONP request to http://demos.kendoui.com/service/products/update 

     $.ajax({ 
      url: "http://demos.kendoui.com/service/products/update", 
      dataType: "jsonp", // "jsonp" is required for cross-domain requests; use "json" for same-domain requests 
      // send the updated data items as the "models" service parameter encoded in JSON 
      data: { 
      models: kendo.stringify(options.data.models) 
      }, 
      success: function(result) { 
      // notify the data source that the request succeeded 

      options.success(result); 
      }, 
      error: function(result) { 
      // notify the data source that the request failed 
      options.error(result); 
      } 
     }); 
     } 
    }, 
    batch: true, 
    schema: { 
     model: { id: "ProductID" } 
    } 
    }); 

    dataSource.fetch(function() { 
    var product = dataSource.at(0); 
    product.set("UnitPrice", product.UnitPrice + 1);   
    dataSource.sync(); 
    }); 

這裏有一個現場演示:http://jsbin.com/omomes/1/edit

+0

試試這個:HTTP ://jsbin.com/oguxac/1/ - 唯一的區別是我沒有使用Read的自定義函數。也許這就是問題所在。如果你看一下控制檯,劍道會拋出一個錯誤。 – Jeff 2013-05-14 13:41:14

+3

這就是問題所在。您還需要使用read()的自定義函數。 – 2013-05-14 13:42:08

+0

但爲什麼這是必要的?如果是這種情況,有沒有更簡單的方法來做我需要做的更新方法,而不必提供我自己的功能只是爲了將結果放入數組? – Jeff 2013-05-14 13:43:04