在我的项目中,我想根据屏幕大小更改网格的过滤器类型。对于大屏幕,我使用
GridFilterMode.Row
对于我想使用的移动设备
GridFilterMode.Menu
(
.Mobile(MobileMode.Phone)
在这个项目中工作不正常,结果非常糟糕)。
所以我试着处理
$(window).resize
事件为我的网格设置正确的过滤器类型。以下是我的功能:
$(window).resize(function () {
var windowSize = $(window).innerWidth();
var filterMode = "";
if (windowSize >= 960) {
filterMode = "row";
loadTemplate(filterMode);
} else if (windowSize < 960) {
filterMode = "menu";
loadTemplate(filterMode);
}
});
function loadTemplate(filterModeType) {
var grid = $("#messagesGrid").data("kendoGrid");
var options = grid.getOptions();
if (options) {
options.filterable = { "mode": filterModeType }
options.toolbar = [
{
template: $("#toolbarTemplate").html()
}
];
grid.setOptions(options);
}
}
一切正常。
但是当我打电话的时候
grid.setOptions()
它会刷新网格数据源,并在每次更改窗口大小时向服务器发出新的请求。所以,如果我调整窗口大小10次,我会收到10个请求!
有人知道如何防止这种情况吗?
以防万一-我的
Kendo().Grid
数据源部件
.DataSource(dataSource => dataSource.Ajax()
.Read(read => read.Action("FilterTypeGrid", "Project"))
.PageSize(20)
.Sort(sort => sort.Add(t => t.Date).Descending())
.ServerOperation(true)
.AutoSync(true)
.Model(model =>
{
model.Id("Key");
model.Field(a => a.Key).Editable(false);
model.Field(a => a.Text).Editable(false);
model.Field(a => a.Date).Editable(false);
model.Field(a => a.Name).Editable(true);
model.Field(a => a.Selected).Editable(true);
}))