如何在ACE编辑器中禁用gutter上的行选择?

时间:2015-06-18 13:02:16

标签: javascript ace-editor

我正在尝试禁用与ace编辑器的所有用户交互。我设法通过以下设置停止了大多数互动:

codeEditor.setReadOnly(true);
codeEditor.setHighlightActiveLine(false);
codeEditor.setHighlightGutterLine(false);
codeEditor.container.style.pointerEvents = "none";
codeEditor.renderer.$cursorLayer.element.style.opacity = 0;

然而,虽然现在禁用了大部分交互性,但是阴沟上的mousedown事件仍然有效。例如,当您单击装订线时,它仍会选择该行上的文本。其他事件,如双击全选或代码折叠似乎也有效。你可以在这里查看: http://jsfiddle.net/squarePenguin/zhpms1mm/

我试图删除排水沟上的听众,但似乎没有任何效果。这就是我尝试的一切:

codeEditor.getSession().removeAllListeners("guttermousedown");
codeEditor.getSession().removeAllListeners("gutterclick");
codeEditor.getSession().removeAllListeners("gutterdblclick");
codeEditor.getSession().removeAllListeners("guttermousemove");
codeEditor.getSession().removeAllListeners("click");
codeEditor.getSession().removeAllListeners("mousedown");
你知道吗?感谢您的耐心等待!

1 个答案:

答案 0 :(得分:1)

你可以用

完成
stop = function(e) {e.stop()}
editor.on("guttermousedown", stop, true);
editor.on("gutterclick", stop, true);
editor.on("gutterdblclick", stop, true);
editor.on("guttermousemove", stop, true);
editor.on("click", stop, true);
editor.on("mousedown", stop, true);

codeEditor.getSession().removeAllListeners不起作用,因为在编辑器而不是会话上调度鼠标事件,而removeAllListeners不会删除defaultHandlers

codeEditor.container.style.pointerEvents = "none";不起作用,因为ace中的某些元素具有pointerEvents="auto"样式。