2014-09-22 141 views
0

我想要一个函数在ACE编辑器结束解析新的源代码时能够被回调,例如,在每个后续的DOM节点上添加一个click事件监听器。到目前为止,我无法找到合适的ACE事件使用,这和简单的下面的代码不会做任何事情:ACE Editor“解析结束”事件

editor = ace.edit $('#editor') 
    editor.setReadOnly true 

    // editor change event - never triggered in this case 
    editor.getSession().on 'change', (e) -> 
     console.log e 

    // changing the language makes ACE parse the source code and generates 
    // a new DOM... 
    editor.getSession().setMode "ace/mode/javascript" 
    // ... but a this point, $('.ace_identifier') returns a empty array 
    // instead of the expected list of ace_identifiers created 
    console.log $('.ace_identifier') 

回答

1

没有为“解析结束”任何情况下,你可以在editor.renderer使用afterRender事件,但ace使用dom作为画布,仅为文本的可见部分创建节点,并经常丢弃和重绘整个事物,因此将事件监听器添加到ace编辑器中的dom节点是一个坏主意。

您可以将侦听器添加到编辑器中,并使用session.getToken在光标下获取令牌。

王牌谷歌小组讨论这可能是有益的https://groups.google.com/d/msg/ace-discuss/XFnf3-3gcAY/u7OIMdHkGGwJ

+0

随着'afterRender'事件,我确实能够选择'.ace_identifier'的DOM,但它设定一个点击事件处理程序不起作用。 – 2014-09-29 06:03:54

+0

那么你可以添加指针事件:自动样式。但正如我所说的向每个节点添加事件处理程序是一个非常糟糕的主意,您应该使用editor.on(“click”listener和'session.getToken'来代替。 – 2014-09-29 08:28:19

+0

您是怎么知道这个'pointer-events'设置为none !我花了这么多的精力和时间,因为这个!我将在以后使用优化的方式,这是迄今为止的原型设计。 – 2014-09-29 20:35:23