我有一个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中看到它 - 但执行在我在我的代码示例中标记它的架构部分停止。
如果我问一个非常明显的问题,我会道歉,但我对剑道很新。
答案 0 :(得分:1)
看看剑道演示网站,这篇文章解释了如何很好地阅读remote data。我相信schema.data只需要字符串值。配置您的model和parse,然后只需调用read(),您的datasource.data集合将被填充,然后您可以使用它。
另请注意,datasource.read()是异步的,因此应该从数据源的完整事件调用populatefields方法,而不是其他方式。例如,填充时可能没有数据。
transport: {
read: {
url: "../WebServiceAddress",
dataType: "json",
type: "POST",
contentType: 'application/json; charset=utf-8',
cache: false,
complete : function () { }
},