我已将此问题隔离开来,请查看并尝试full source here。
重现的步骤:
按 Ctrl + 输入以运行代码段
点击' 说你好'自定义命令按钮,并检查是否有事件 处理程序运行
注意:请不要搜索localStorage周围的解决方案。可以使用不同的服务器端状态持久解决方案来重现该问题。 (正如我原来的应用程序所做的那样)
知道在哪里修补? ......还是解决方法?
答案 0 :(得分:1)
希望这会帮助你。
http://dojo.telerik.com/EDUCO/4
我为您添加了以下代码:
dataBound: function (e) {
$(".k-grid-SayHello").on('click', function (a) {
console.log(e);
a.preventDefault();
alert('Hello');
});
},
当重新绑定发生时,我怀疑它正在丢失与事件处理程序的连接,所以如果根据它的类名查找按钮并重新附加它,我所做的就是完成。
显然,你可以调整解决方案以满足你的需求,但这是我在我需要的时候为我的项目做的事情"调用"按钮上的自定义操作/动态创建动态。
任何问题都让我知道。
答案 1 :(得分:1)
调用grid.setOptions()后保留函数引用 在将函数引用传递给setOptions方法之前,我将函数引用添加回反序列化的配置对象。 (http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#methods-setOptions)
$(document).ready(function () {
var grid = $("#myGrid").data("kendoGrid");
var originalOptions = grid.getOptions();
var savedOptions = JSON.parse(localStorage["myGrid-options"]);
if (savedOptions) {
var detaylarFunc = originalOptions.columns[3].command[0].click;
savedOptions.columns[3].command[0].click = detaylarFunc;
grid.setOptions(savedOptions);
} else {
grid.dataSource.read();
}
});
//Custom command
function Detaylar(e) {
e.preventDefault();
var grid = $("#myGrid").data("kendoGrid");
options = grid.getOptions();
localStorage["myGrid-options"] = kendo.stringify(grid.getOptions());
}