我们有一个完全按名称命名的大型javascript应用程序。我们使用require.js加载所有内容(需要命名空间上的生命),然后使用grunt将100+/-js文件(包括库)编译为一个缩小的文件。
我可以用加载ace.js
define(['ace/ace'], function (ace) {....
我能够创建一个编辑器,如
var editor = ace.edit("editor");
然而,我不确定是否加载模式和主题。当我尝试。。
editor.setTheme("ace/theme/monokai");
editor.getSession().setMode("ace/mode/javascript");
请求尝试在web根目录中查找该文件。
mysite.com/theme-monokai.js
然而,这些文件需要与其他文件一起编译,并放入一个大的缩小文件中。
我想我需要在我的define语句中包含主题和模式,但我已经尝试过了,虽然我可以获得诸如之类的主题对象
define(['ace/mode-javascript'], function (mode_js) {
console.log('mode loaded just fine')
console.log(mode_js)
...
然而,我没有任何运气尝试将对象传递到setTheme和setMode函数中。
editor.setTheme(ace_theme);
editor.getSession().setMode(mode_js);
所有这些的最终结果是,我有一个王牌编辑在工作,但没有突出显示或主题。行编号工作,选项卡工作。我不确定这些东西是否在主ace.js中,或者它是否成功加载了依赖项,只是无法加载或无法将主题/模式路径映射到它们的加载方式。
有没有办法用配置来设置主题和模式的默认值?这可能会有所帮助。有人知道我缺了什么吗?
谢谢。
我使用的ace.js构建的文件夹/文件结构如下
/ace/ace.js
/ace/mode-javascript.js
/ace/theme-textmate.js
etc
etc
问题是,王牌期待着魔法之路("ce/theme/textmate")我需要的是要求获得对文件(真实文件)的正确引用,并在所有文件缩小并合并为一个文件后对ace("ce/theme/textmate")进行正确引用。
解决方案是
更改文件夹/文件名结构以模拟预期的内容。所以我在/ace目录下创建了一个名为mode的文件夹。我将mode-javascript.js重命名为javascript.js,并将其放在新的模式文件夹中。
我把这个文件添加到我项目中的define()调用中,这样它就会被认为需要添加到组合文件中。
define(['ace/ace','ace/mode/javascript'],function(ace,ace_mode){…
在此之后,我对ace_mode不做任何操作,但我需要requirejs看到它,以便将它添加到组合文件中。
在这之后,我使用魔术串,就像王牌网站对说的那样
editor.getSession().setMode("ace/mode/javascript");
我对主题也做了同样的事情。到目前为止,它似乎正在发挥作用。我有主题,语法突出显示,代码折叠等工作。
还有一件事要提。正如我所说,我们的项目是名称空间CXX,并且需要在该名称空间中生存。Ace在窗口上查找require或其自己的名称空间"Ace",这两个都不是我想要的,所以我删除了Ace文件底部的代码,该代码试图启动Ace本身并将其分配给全局变量。通过删除此代码,我的define调用能够像加载一个最合适的AMD模块一样加载Ace。主要地