我在slickgrid中使用了自定义格式程序和编辑器,这只是复选框angular指令。我使用两次指令,一次用于格式化程序,一次用于编辑器。格式服务和编辑器由角度服务提供。 Slickgrid本身被包装成一个角度指令。

根据slickgrid文档Writing custom editors实施编辑器

slickgrid指令在多个地方使用。我正在苦苦挣扎的一种情况是,当有网格时,网格外部有按钮。

当单击一个按钮时,我必须从单元格/编辑器中获取值。

渲染网格时,一旦看到复选框。根据使用该格式化程序的单元格的当前值来选中/取消选中它。

当单击带有复选框的单元格时,该复选框从未选中变为选中,反之亦然。然后,单击复制到单元格中的编辑器复选框的值在网格中的其他位置单击,然后格式化程序将显示选中/未选中。

回到我的场景:当在编辑器模式下选中/取消选中复选框并直接单击网格外部的按钮之一时,编辑器的值尚未应用于单元格,因此发送了错误的值。当我们仍处于编辑器模式时,未提交任何值。

现在的问题是,如何在动态更改复选框的值后立即提交更改到单元格,而无需等待slickgrid从编辑器模式更改为格式化程序模式?

发现this question相对,但是我的环境不一样。

我发现编辑器采用了带有commitChanges()方法的args参数,但是如何使用它呢?

最好

最佳答案

我尝试了很多slickgrid方法,但是没有找到更好的解决方案。

在我的自定义编辑器构造函数中,我添加了一个监视程序,该监视程序监视对Checkbox指令的checked属性的更改。

$timeout(function () {
        controlScope.$watch('checked', function () {
            $timeout(function() {
                args.grid.getEditController().commitCurrentEdit();
                args.grid.resetActiveCell();

            });

        });
    });


第一个超时是不中断正在运行的摘要周期,而只是在下一次运行时摘要它。

并且需要下一次超时,直到角度更改范围完成,然后才提交更改。否则,commitCurrentEdit()将终止编辑器,并因此终止Checkbox指令的范围。

我希望会有更好的解决方案。

1编辑:此解决方案带来奇怪的行为。第一次单击效果很好,但是在同一单元格上的下次单击不会更改选中的复选框。

2编辑:我已经添加了grid的resetActiveCell()来保留活动单元格的焦点,现在它可以按我的意愿工作。

3编辑:如果不更改Slickgrid的源代码,我们将找不到更好的解决方案,这是不希望的。在寻找替代方法和解决问题的方法之后,我们决定使用ui.grid,它可以与我们的环境完美配合,因为我们使用的是角度。而且,默认情况下,仅使用ui.grid即可解决slickgrid遇到的大多数问题,而无需进行自定义。 Slickgrid仍然是可用于javascript开发人员的最佳网格,但似乎它正在因JavaScript的发展而放缓。

关于javascript - 如何从slickgrid中的代码提交单元格中的更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35741809/

10-12 12:56