我正在使用KendoGrid显示从我的服务中获取的一些数据。KendoGrid刷新
用户在加载按钮上选择一些参数(公司和日期)和cliks。
用户在datePicker上选择一个月,服务器将返回该日期加上11个月的数据。
我只在用户点击加载按钮后才显示网格。
装载功能:
function loadGrid(e) {
var companyIds = [1, 3, 7]; // user select it
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var rowHeaders = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"];
var _dataSource = function() {
var dataSource = new kendo.data.DataSource({
transport: {
read: {
url: URL,
dataType: "json",
data: {
companyIds: companyIds,
date: kendo.toString(picker.value(), "yyyy-MM-dd") // user select it
}
}
},
schema: {
data: function (data) {
// function to handle data returned from server
var dataArray = [];
var index = 0;
for (var key in data[0]) {
if (Object.prototype.hasOwnProperty.call(data[0], key)) {
var property = key;
if (property == "date") {
continue;
}
key = {};
key["X"] = rowHeaders[index];
index++;
for (var i = 0; i < data.length; i++) {
var date = data[i].date;
var dateSplit = date.split("-");
var year = dateSplit[0];
var month = months[dateSplit[1] - 1];
var header = month + "_" + year;
key[header] = data[i][property];
}
dataArray.push(key);
}
}
return dataArray;
}
}
});
return dataSource;
};
$("#grid").kendoGrid({
scrollable: false,
editable: false,
dataSource: _dataSource()
});
}
当我点击首次加载按钮,数据源被加载并正确显示网格。但是,例如,如果我更改datePicker的日期并再次单击加载按钮,数据源将加载正确的数据(其他月份的新记录),但网格不会刷新。
如果我第一次选择月份Jan/2015
,它会从Jan/2015
加载并显示,直到Dec/2015
,这是正确的。
但如果比我选择月Feb/2015
,从Feb/2015
数据源的负载,直到Jan/2016
(正确的),但网格显示来自Jan/2015
列,直到Dec/2015
,这是不对的。在这种情况下,列Jan/2015
显示为空,并且不显示列Jan/2016
。
有人能指点我正确的方向吗? 谢谢!
它没有工作。同样的结果。 – lpfx
确保数据函数使用新选定的值,而不是来自闭包的一些变量。我将使用一个简单的dataSource,用'data:someFunction',其中'someFunction'是一个全局函数,并且调用'grid.dataSource.fetch()'来更新网格。 – mrmashal
我已经更新了我的答案以显示我的意思。 – mrmashal