Telerik Kendo UI网格在保持(和恢复)其状态后丢失自定义命令事件处理程序

时间:2015-05-08 13:13:57

标签: javascript jquery telerik kendo-grid

我已将此问题隔离开来,请查看并尝试full source here

重现的步骤:

  1. Ctrl + 输入以运行代码段

  2. 点击' 说你好'自定义命令按钮,并检查是否有事件 处理程序运行

  3. 点击左上角' 保存状态'按钮
  4. 点击' 加载状态'按钮,并恢复以前的状态。
  5. 现在再次点击' 说你好'按钮并演示事件句柄将运行,而是发生了一些奇怪的事情。
  6. 注意:请不要搜索localStorage周围的解决方案。可以使用不同的服务器端状态持久解决方案来重现该问题。 (正如我原来的应用程序所做的那样)

    知道在哪里修补? ......还是解决方法?

2 个答案:

答案 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());

    }