Kendo-UI DataSource.read()并不总是发出GET请求

时间:2015-03-09 17:04:01

标签: kendo-ui

我有一个kendo数据源,用于填充kendo模板。

var remoteTemplate = kendo.template($("#remotetemplate").html(), { 
useWithBlock: false });

var remoteDatasource = new kendo.data.DataSource({    

    transport: {
        read: {
            url: 'Home/RemoteData',                    
        }
    },
    change: function () {
        $("#remotemovies tbody").html(kendo.render(remoteTemplate, this.view()));
    }
});

当我们调用read方法remoteDatasource.read()

时,会向Home / RemoteData发出GET请求

再读一遍,另一个请求是Home / RemoteData 我知道这不好,但我想了解这一点:-) remoteDatasource.read()

到目前为止很好,但是再一次我调用read(),GET请求就是 没有发生。这是为什么? remoteDatasource.read()

否则无论我在此之后拨打多少次

,都会收到请求

我也注意到fetch()方法的行为相同。

有人可以解释一下为什么会出现这种行为? read和fetch有什么区别。

3 个答案:

答案 0 :(得分:1)

read()方法应该每次都请求远程服务。

fetch()方法仅在第一次请求远程服务。

您的特定read()可能没有请求远程服务,因为它正在缓存。您可以将您的请求作为POST尝试或将transport.read.cache中的配置设置为false吗?

http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#configuration-transport.read.cache

答案 1 :(得分:1)

似乎优化了行为如果在连续行中调用datasource.read(),则Kendo将调用次数限制为2。这是公平的,因为在实际情况下不需要这样的代码。

以下是我编写的两种代码。

场景1:响应按钮点击调用datasource.read()。

    $("#remoteRequestBtn").click(function () {
        var remoteTemplate = kendo.template($("#remotetemplate").html(), { useWithBlock: false });

        var remoteDatasource = new kendo.data.DataSource({
            transport: {
                read: {
                    cache: false,
                    url: 'Home/RemoteData',
                }
            },
            change: function () {
                $("#remotemovies tbody").html(kendo.render(remoteTemplate, this.view()));
            }
        });

        remoteDatasource.read();

    }); 

结果:每当我点击按钮时,都会向Web api调用Get请求。

场景2:响应单击按钮调用多个datasource.read()。

$("#remoteRequestBtn").click(function () {
        var remoteTemplate = kendo.template($("#remotetemplate").html(), { useWithBlock: false });

        var remoteDatasource = new kendo.data.DataSource({
            transport: {
                read: {
                    cache: true,
                    url: 'Home/RemoteData',
                }
            },
            change: function () {
                $("#remotemovies tbody").html(kendo.render(remoteTemplate, this.view()));
            }
        });

        remoteDatasource.read();
        remoteDatasource.read();
        remoteDatasource.read();
        remoteDatasource.read();

    });

注意:我正在调用read方法4次,现在如果你问我这是否是一个有效的场景:-)它不是: - )

结果:在这种情况下,我只得到两个GET请求(对于第一个和第二个读取(),其余的读取被忽略)

截至目前,我想将此视为Kendo-UI方面的优化,除非有人回来并纠正它。

特别感谢JFlok& CodingWithSpike用于给出正确的指示。

答案 2 :(得分:0)

您的change回调或任何其他Javascript是否会引发异常?尝试删除change处理函数。我已经看到过去的问题,如果在DataSource尝试处理服务器响应时抛出未捕获的异常,那么DataSource将处于认为前一个请求仍在运行的状态(因为它从未因错误而完成,并且不会再做另一个请求。