我有一个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
我知道这不好,但我想了解这一点:-)
remoteDatasource.read()
到目前为止很好,但是再一次我调用read(),GET请求就是
没有发生。这是为什么? remoteDatasource.read()
否则无论我在此之后拨打多少次
,都会收到请求我也注意到fetch()
方法的行为相同。
有人可以解释一下为什么会出现这种行为? read和fetch有什么区别。
答案 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将处于认为前一个请求仍在运行的状态(因为它从未因错误而完成,并且不会再做另一个请求。