【发布时间】:2016-06-01 10:39:11
【问题描述】:
我正在尝试将 CodeMirror 和 At.js 组合成一个“编辑器”。我在当前版本的编辑器中使用 At.js 插入代表 DSL 某些方面的 HTML 位。
所以 at.js 基本上处理了编辑器的自动完成部分。这一切都很好。然而,编辑器需要一些微调(行号,更好的输入处理等)。
CodeMirror 提供了这一点。但是它不能很好地与 At.js 配合使用。出于某种原因(我还找不到)At.js 没有注册事件或绑定到我已将 CodeMirror 绑定到的 domElement。
我尝试通过捕获 CM 事件并修复事件并在所述 domElement 上触发这些事件来手动使 CodeMirror 事件在 DOM 中冒泡。到目前为止没有运气。
cm.on("keyup", function ( editor, e ) {
e = $.event.fix(e);
e.namespace = 'atwhoInner';
console.warn("cmUp", e);
$(self.domElement).trigger($.event.fix(e));
});
cm.on("keydown", function ( editor, e ) {
e = $.event.fix(e);
e.namespace = 'atwhoInner';
console.warn("cmDown", e);
$(self.domElement).trigger($.event.fix(e));
});
我可以捕捉到这个事件,所以我知道它工作正常。
我会看看我是否可以创建一个小提琴来准确地模仿我的情况(我会在此之后做)。同时,如果有人能指出我大致的方向,那就太好了。
我自己的猜测是 CM 会阻止事件冒泡或阻止 At.js 附加它需要的一些 HTML 元素。或者我需要将 A.js 绑定到不同的元素。
快速概述我所拥有的(根本不完整)。
var domElement = $('#someid');
//Using domElement directly causes CodeMirror to flipout.
var cm = CodeMirror(domElement[0], {
mode: "htmlmixed",
extraKeys: { "Ctrl-Space": "autocomplete" },
value: ' <span></span>',
lineNumbers: true
});
cm.on("keyup", function ( editor, e ) {
e = $.event.fix(e);
e.namespace = 'atwhoInner';
console.warn("cmUp", e);
$(self.domElement).trigger($.event.fix(e));
});
cm.on("keydown", function ( editor, e ) {
e = $.event.fix(e);
e.namespace = 'atwhoInner';
console.warn("cmDown", e);
$(self.domElement).trigger($.event.fix(e));
});
domElement.atwho({
at: 'fancystuff.',
displayTpl: "${displayTpl}",
insertTpl: "${insertTpl}",
showTheAt: false,
limit: 100,
searchKey: "searchField",
suffix: "",
data: [{displayTpl:'some templating', insertTpl: 'some templating', searchField;'stuff to search'},
{displayTpl:'some templating', insertTpl: 'some templating', searchField;'stuff to search'}
]
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='someid' contenteditable='true'></div>
【问题讨论】:
标签: jquery codemirror key-events