Kendo UI - DataSource在使用fetch()时工作,但不能读取()

时间:2014-02-24 16:00:29

标签: kendo-ui

我有一个Kendo UI DataSource,当我使用fetch()时可以工作,但是当我使用与read()完全相同的配置时,它会失败。这是一个问题,因为我需要多次检索数据,而我不能用fetch()来做到这一点。

这是DataSource代码 -

       var FieldsDataSource = new kendo.data.DataSource({
        transport:  {
        read: {
            url: "../WebServiceAddress",
            dataType: "json",
            type: "POST",
            contentType: 'application/json; charset=utf-8',
            cache: false
        },                  
        parameterMap: function() {
            return   "{some mapping that has been confirmed to work}";
        },
        schema: {
            data: function (data) {
                if (data && data.d) {
                    //execution gets to here and stops
                    return data.d;          
                }
                else {
                    return [];
                }
            },
        }  

    });

以下是调用DataSource.read()函数的代码 -

     function loadFields() {
        FieldsDataSource.read(function() {
            var data = this.data();
            if (data.length > 0) {

                for (var i = 0; i < data.length; i++) {
                    var dataitem = data[i].Key;
                    $("#" + dataitem + "_field").prop("checked", data[i].Value);
                }
            }
        });
    }

如果我将FieldsDataSource.read(function()更改为FieldsDataSource.fetch(function()一切正常,但这没有意义,因为我在阅读和提取的同意做同样的事情,差异是获取只获取数据一次。

我所知道的是数据是从服务器返回的,我可以在fiddler中看到它 - 但执行在我在我的代码示例中标记它的架构部分停止。

如果我问一个非常明显的问题,我会道歉,但我对剑道很新。

1 个答案:

答案 0 :(得分:1)

看看剑道演示网站,这篇文章解释了如何很好地阅读remote data。我相信schema.data只需要字符串值。配置您的modelparse,然后只需调用read(),您的datasource.data集合将被填充,然后您可以使用它。

另请注意,datasource.read()是异步的,因此应该从数据源的完整事件调用populatefields方法,而不是其他方式。例如,填充时可能没有数据。

transport:  {
        read: {
            url: "../WebServiceAddress",
            dataType: "json",
            type: "POST",
            contentType: 'application/json; charset=utf-8',
            cache: false,
            complete : function () {    }
        },