Kendo UI数据源read()方法不执行

时间:2013-10-02 16:22:38

标签: kendo-ui refresh datasource

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

以下是我们代码的示例:

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]);
};

取消viewmodel:

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

1 个答案:

答案 0 :(得分:4)

当您将读取操作定义为函数时,您需要使用传递的事件参数的成功函数来表示成功。以下是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>