2016-05-12 172 views
0

Java脚本和我不是朋友。扩展ace编辑器,如何导入自定义文件

Ace是javascript中的代码ide,可以编写自定义模式,为模式添加自定义代码段,编写自定义自动补全程序。 我知道如何编写能够做些什么的代码,但我不明白如何将这些东西整合到JavaScript中。

这里有一个定义(“mode/blabla”,[“exports”,“modules,..”,(exports,modules) - > {} ,这看起来与角度加载模块非常相似,但是当我只是在html中添加脚本,它不知道定义方法 我是否需要构建所有的东西才能使其工作正常将文件放在ace文件夹中并构建它 我真的很想使用bower import angular-ace-ui,然后喂它我的小模式,突出显示,完成文件自己。所以我可以保持我自己的东西容易访问,可编辑和独立于完整的王牌,我已经在bower-components/ace-builds/right

有人可以向我解释或指向我一个很好的学习材料t帽子教我如何依赖,导入和集成函数在Java脚本项目中工作,如ace。 我了解Java,但Java脚本只是很奇怪,很难遍历代码来查看事物的来源和去向。

我试过这个,但这不起作用,因为它在构建过程之外,我不知道在哪里寻找钩子。

< script src = "../src-noconflict/ace.js" > < /script> 
 
<!-- load ace language tools --> 
 
<script src="../src - noconflict/ext - language_tools.js "></script> 
 
<script src="../../../app/scripts/editor/mode/myql.js "></script> 
 
<script src="../../../app/scripts/editor/snippets/myql.js "></script> 
 
<script> 
 
    // trigger extension 
 
    var langtools = ace.require(" 
 
ace/ext/language_tools "); 
 
    var editor = ace.edit(" 
 
editor "); 
 
    editor.session.setMode(" 
 
ace/mode/myql "); 
 
    editor.setTheme(" 
 
ace/theme/chrome "); 
 

 
    // enable autocompletion and snippets 
 
    editor.setOptions({ 
 
     enableBasicAutocompletion: true, 
 
     enableSnippets: true, 
 
     enableLiveAutocompletion: true 
 
    }); 
 
</script>

我希望得到这样的工作 “自动完成/完成者”“王牌/模式/ myql”是模块,我想整合。 我得到了下来和脏代码,但没有办法使它可访问。 的文件是在这样的模式的形式在这里看到sql.js和sql_highlight_rules.js https://github.com/ajaxorg/ace/tree/master/lib/ace/mode

<div ui-ace="{ 
 
      useWrapMode : true, 
 
      showGutter: false, 
 
      theme:'chrome', 
 
      mode: 'mysql', 
 
      require: ['ace/ext/language_tools','autocomplete/mycompleter','ace/mode/myql'], 
 
      advanced: { 
 
       enableSnippets: true, 
 
       enableBasicAutocompletion: true, 
 
       enableLiveAutocompletion: true 
 
      } 
 
      }"></div>

回答

0

我想我找到了正确的方式去了解的东西。 忘记angular-ace-ui它只会让事情变得复杂。

凉亭安装王牌

地方custom_mode.js,custom_highlight_rules.js,custom_snippets.js,customer_snippets.txt,在你的源文件夹custom_completer.js 地方。 设置它们酷似类似文件

bower_components/ace/lib.ace/ 
    ./mode 
    ./snippets 
    ./autocomplete 

建立一个咕噜或一饮而尽或任何建设任务 复制文件形成你的工作目录上面提到的bower_components文件夹。 然后运行王牌构建节点./Makefile.dryice.js

现在导入的工作文件通过凉亭覆盖,你需要

"overrides": { 
    "ace": { 
     "main": [ 
     "build/src-min-noconflict/ace.js", 
     "build/src-min-noconflict/ext-language_tools.js", 
     "build/src-min-noconflict/theme-monokai.js", 
     "build/src-min-noconflict/custom_mode.js", 
     "build/src-min-noconflict/snippets/custom_mode.js" 
     ] 
    } 

通常只应所需的王牌构建,当你改变的东西,不需要减慢默认的应用程序构建。 我还没有尝试过,但理论上我没有看到它不应该工作的原因。 我认为这是最简单的方式来设置东西舒适地使用自定义版本,同时保持外部ace文件不变。

我玩的想法是使用ace-ui角度控制器来设置onload的一切,但模式需要通过模式名称来引用。它适用于完成者,因为它只需调用langTools.addCompleter(newcompleter)方法并使用getCompletions函数参数传入对象。 然而,该模式需要以某种方式注册为已定义,我不知道如何在ACE构建管道外执行此操作。我的解决方案看起来是这样。