Kendo MVC Grid命令按钮Visible配置无法通过setOptions保存问题咨询
Kendo MVC Grid getOptions/setOptions 不保存命令按钮Visible状态的问题解决
新版本支持情况
截至2024年的Kendo UI最新版本,依然不支持通过getOptions()和setOptions()直接保存命令按钮.Visible()绑定的JS函数状态。原因是getOptions()仅序列化网格的静态配置与用户交互产生的状态(如筛选、分组、列宽),不会保存动态绑定的JS逻辑或函数引用。
可行解决办法
要保存并恢复命令按钮的显示状态,需要手动扩展getOptions和setOptions的逻辑,具体步骤如下:
1. 自定义保存逻辑,记录按钮可见状态
调用getOptions()获取基础配置后,手动遍历命令列,记录每个按钮的当前可见状态:
// 获取网格实例 var grid = $("#grid").data("kendoGrid"); // 获取默认配置 var options = grid.getOptions(); // 遍历列,定位命令列并记录按钮可见性 options.columns.forEach(function(column) { if (column.command) { column.command.forEach(function(cmd) { // 通过命令name定位按钮元素 var btnElement = grid.tbody.find(".k-grid-" + cmd.name).first(); // 将可见状态存入配置对象 cmd.isVisible = btnElement.is(":visible"); }); } }); // 保存扩展后的配置到本地存储或后端 localStorage.setItem("gridOptions", JSON.stringify(options));
2. 恢复配置时,手动设置按钮可见性
调用setOptions()恢复基础配置后,遍历命令列,根据保存的状态控制按钮显示:
var savedOptions = JSON.parse(localStorage.getItem("gridOptions")); var grid = $("#grid").data("kendoGrid"); // 先恢复网格基础配置 grid.setOptions(savedOptions); // 遍历列,恢复命令按钮可见状态 savedOptions.columns.forEach(function(column) { if (column.command) { column.command.forEach(function(cmd) { if (typeof cmd.isVisible !== "undefined") { // 切换表格体中对应按钮的可见性 grid.tbody.find(".k-grid-" + cmd.name).toggle(cmd.isVisible); // 若表头存在命令按钮,同步切换 grid.thead.find(".k-grid-" + cmd.name).toggle(cmd.isVisible); } }); } });
3. 优化方案:结合业务逻辑复用
如果你的.Visible()绑定的JS函数是基于业务规则(如用户权限),可以在恢复配置时直接重新执行该函数,确保状态与业务逻辑一致:
// 假设原Visible绑定的函数为checkButtonPermission(cmdName) savedOptions.columns.forEach(function(column) { if (column.command) { column.command.forEach(function(cmd) { var isVisible = checkButtonPermission(cmd.name); grid.tbody.find(".k-grid-" + cmd.name).toggle(isVisible); grid.thead.find(".k-grid-" + cmd.name).toggle(isVisible); }); } });
内容的提问来源于stack exchange,提问作者DevilDog
相关产品推荐
相关产品推荐

