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

そして、ビューモデルのキャンセルで:

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 に答える