Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从slickgrid中的代码提交单元格中的更改_Javascript_Angularjs_Checkbox_Angularjs Scope_Slickgrid - Fatal编程技术网

Javascript 如何从slickgrid中的代码提交单元格中的更改

Javascript 如何从slickgrid中的代码提交单元格中的更改,javascript,angularjs,checkbox,angularjs-scope,slickgrid,Javascript,Angularjs,Checkbox,Angularjs Scope,Slickgrid,我在slickgrid中使用了自定义格式化程序和编辑器,这只是一个简单的指令。我使用了两次指令,一次用于格式化程序,一次用于编辑器。格式化程序和编辑器由angular服务提供。Slickgrid本身被包装成一个角度指令 编辑器是根据slickgrid文档实现的 slickgrid指令用于多个地方。我正在努力解决的一种情况是,当有一个网格时,网格外有一些按钮 单击此按钮时,我必须从单元格/编辑器获取值 渲染栅格时,一旦看到复选框。它基于使用此格式化程序的单元格的当前值进行选中/取消选中 当点击带有

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

编辑器是根据slickgrid文档实现的

slickgrid指令用于多个地方。我正在努力解决的一种情况是,当有一个网格时,网格外有一些按钮

单击此按钮时,我必须从单元格/编辑器获取值

渲染栅格时,一旦看到复选框。它基于使用此格式化程序的单元格的当前值进行选中/取消选中

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

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

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

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

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


最好的

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

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

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

            });

        });
    });
第一个超时不是中断运行摘要周期,而是在下次运行时对其进行摘要

下一个超时需要等待angular完成范围更改,然后提交更改。否则,commitCurrentEdit()将终止编辑器,从而终止Checkbox指令的作用域

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

            });

        });
    });
我希望会有更好的解决办法

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

2编辑:我添加了网格的resetActiveCell()以保留活动单元格的焦点,现在它可以按照我的要求工作


3编辑:如果不更改Slickgrid的源代码,我们无法找到更好的解决方案,这是不希望的。在为这个问题寻找替代方案和解决方案之后,我们决定使用ui.grid,它可以很好地适应我们的环境,因为我们使用的是angular。我们在slickgrid中遇到的大多数问题,默认情况下都是通过使用ui.grid而不进行自定义来解决的。Slickgrid仍然是javascript开发人员可以使用的最好的网格之一,但它似乎正在减缓javascript的进度

将更改提交到网格的另一个解决方案是调用:


Slick.GlobalEditorLock.commitcurrendedit()

听起来您缺少自定义编辑器上的applyValue方法。当您离开单元格时,会自动调用它。您可以在选中的事件处理程序中手动触发此事件。因此,在客户控件的init函数中,放置一个选中的处理程序,并在该调用中添加applyValue