3

谁能解释一下为什么当我第一次进入我的页面时我对数据源读取方法的调用工作正常,但是每当我调用它来刷新视图时都无法执行?作为记录,我在 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]);
};

并在取消 viewmodel :

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

1 回答 1

4

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

<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>
于 2013-10-02T17:54:27.147 回答