【问题标题】:Kendo Datasource Transport custom function not getting calledKendo Datasource Transport 自定义函数没有被调用
【发布时间】:2013-05-08 18:38:33
【问题描述】:

我在 Kendo UI 数据源中遇到了一个相当烦人的错误 (?)。

当我传递一个自定义函数时,我的传输上的更新方法没有被调用,但如果我只给它一个 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]);
            }
      });
   }
}
...

该函数没有被调用,但是对当前页面 URL 发出了一个 ajax 请求,并且正在发布模型数据,这很奇怪。对我来说听起来像是一个错误。

我需要这个的唯一原因是因为 Kendo 无法确定我的更新操作只返回一个元素,而不是一个数组 - 所以,因为我不想为了满足 Kendo 而弯曲我的 API ,虽然我会反过来做。

有没有人遇到过这种情况,可以指出正确的方向吗?

我也尝试使用 schema.parse,但是在调用 Update 方法时没有调用它。

我使用myDs.sync() 来同步我的数据源。

【问题讨论】:

  • 我也有同样的问题,不知道解决没...

标签: kendo-ui


【解决方案1】:

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

【讨论】:

  • 试试这个:jsbin.com/oguxac/1 - 唯一的区别是我没有使用自定义函数进行读取。也许这就是问题所在。如果你查看控制台,剑道会抛出错误。
  • 这就是问题所在。您还需要为 read() 使用自定义函数。
  • 但是为什么有必要这样做呢?如果是这样的话,有没有更简单的方法来做我需要在更新方法中做的事情,而不必提供我自己的函数来将结果变成一个数组?
  • 您可以查看源代码以了解为什么需要 - kendo.data.js。您还可以查看 DataSource API 参考 - schema.parse 是您所需要的。
  • 我试过 schema.parse (如我的问题所述),它只在阅读时被调用,而不是更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
  • 2015-06-21
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多