【问题标题】:Kendo UI datasource read() method doesn't executeKendo UI 数据源 read() 方法不执行
【发布时间】:2013-10-09 03:03:02
【问题描述】:

谁能解释一下为什么当我第一次进入我的页面时我对数据源读取方法的调用工作正常,但每当我调用它来刷新视图时却无法执行?作为记录,我在 Microsoft MVC 环境中使用 Kendo UI web(不是 MVC 的)。我可以在调试中清楚地看到读取永远不会被调用,但是如果我尝试介入,我会进入 JQuery 缩小文件......这对我来说是不可能调试的。

这是我们的代码示例:

var testDataSource = new kendo.data.DataSource({
    transport: {
        read: function (options) {
            $.ajax({
                url: "/Test/GetById",
                data: { id: options.data[0] },
                beforeSend: function() {
                    utils.hasPendingChanges = false;
                    myViewModel.set("isDirty", false);
                },
                success: function(result) {
                    utils.convertDates(result);
                    myViewModel.set("test", result);
                    kendo.bind($("#testForm"), myViewModel);
                }
            });
            cache: false
        },
        parameterMap: function() {
            return kendo.stringify(myViewModel.test);
        }
    },
    change: function() {
        var test= this.view()[0];
        if (test!= null) {
            myViewModel.set("test", test);
            $("#testForm").show();
            kendo.bind($("#testForm"), myViewModel);
        } else {
            $("#testForm").hide();
        }
    },
    schema: {
        data: function(data) {
            if (data.notvalid) {
                $(data.data).each(function() {
                    $("#errors").append('<li>' + this.toString() + '</li>');
                });
            } else {
                myViewModel.set("readonly", true);
            }

            return data.data;
        }
    }
});

read 方法在订阅事件中被调用,如下所示:

$.subscribe("/Test/Detail", function (id) {
    testDataSource.read([id]);
};

并且在视图模型的取消中:

cancel: function () {
            $("#errors").html("");
            myViewModel.set("readonly", true);
            testDataSource.read([myViewModel.get("test.ID")]);
        },

【问题讨论】:

    标签: kendo-ui refresh datasource


    【解决方案1】:

    当您将读取操作定义为函数时,您需要使用传递的事件参数的成功函数来表示成功。这是来自documentation 的示例:

    <script>
    var dataSource = new kendo.data.DataSource({
      transport: {
        read: function(options) {
          // make JSONP request to http://demos.kendoui.com/service/products
          $.ajax({
            url: "http://demos.kendoui.com/service/products",
            dataType: "jsonp", // "jsonp" is required for cross-domain requests; use "json" for same-domain requests
            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);
            }
          });
        }
      }
    });
    </script>
    

    【讨论】:

    • 原帖传参数给ajax调用,能否提供一个使用Read函数的例子,也传参数?我在 Kendo 文档中找不到任何类似的示例。谢谢。
    • @AlanFisher 您可能应该将其作为一个单独的问题发布以获得答案。但是,当我遇到这个问题时,我可以提供一个简单的线索。如果您想将数据发送到您的读取服务器 URL,您可以在 ajax 调用中使用 data: 参数。例如数据:{ Value1: 'foo', Value2: 'bar' }.
    猜你喜欢
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2015-10-03
    相关资源
    最近更新 更多