如何使用Ace Editor进行简单的服务器端验证

时间:2014-11-26 04:48:12

标签: javascript ace-editor

我想使用Ace Editor来实现:

  1. 简单的颜色编码语法高亮显示
  2. 服务器端验证,然后使用以下命令标记一些有错误的行:

    editor.session.setAnnotations([{row:1,column:0,text: "消息",类型:"错误"}]);

  3. 我想解析一种逐行解析的新语言"逐行扫描"并且是这样的:

    A. GO TO 20
    B. TURN LEFT
    

    我已经有一个服务器端验证器用于我的语言(Java lib),我已经实现了我的目标

    我怀疑如何将所有内容整合到我的第二个目标中。 ace编辑器是否提供了这样的功能(服务器端验证)?

    我在github上看到了这个:https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_worker.js看起来对JS进行了某种外部验证,但我真的不明白Ace是否提供了我想要的东西。

    如果ACE不支持,我该如何实现?如果你不能提供一些高水平的建筑和#34;提示将不胜感激......

1 个答案:

答案 0 :(得分:0)

Ace没有向服务器发送内容的验证器示例,但它在webworker中运行验证器,这有点类似。

问题的天真方法是向会话添加更改侦听器,并在每次更改时将会话内容发送到服务器,运行验证程序,发回带有错误位置的json,并使用setAnnotations的方式显示在你的问题中。

但是在每次更改时发送整个文档都很慢,因此ace只发送更改,并从中重建文档。

王牌如何运作?:
模式具有createWorker函数,用于创建WorkerClient的实例,WorkerClient启动webWorker并将changeListener添加到文档中。 worker.js使用mirror.js从更改中重建文档,并在超时后调用函数。所有语言特定部分都在该功能中。如果您以某种方式发现难以理解javascript_worker.js

,请参阅json_worker.js

如果您不想采用天真的方法,可以重复使用某些ace webWorker代码与服务器同步。对于客户端,您需要将worker_client.js中的postMessage替换为send over socket,并将服务器替换为nodejs或重新实现java中的mirror.js

然而,在js中重新实现您的语言验证并使用类似javascript_worker中的jshint将提供更好的用户体验。您甚至可以使用java to js compiler