我们有一个完全命名空间的大型JavaScript应用程序。我们使用require.js加载所有内容(需要命名空间)然后我们使用grunt将100 +/- js文件编译成一个缩小的文件。
我可以用
加载ace.jsdefine(['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编辑器工作,但没有突出显示或主题。行编号工作,标签工作。我不确定这些东西是否在主要的ace.js中,或者它是否成功加载其依赖项,并且无法加载或无法将主题/模式路径映射到它们的加载方式。
有没有办法用配置设置主题和模式默认值?这可能有所帮助。有谁知道我错过了什么?
感谢。
答案 0 :(得分:0)
我所拥有的ace.js构建的文件夹/文件结构就像这样
/ace/ace.js
/ace/mode-javascript.js
/ace/theme-textmate.js
etc
etc
问题在于ace需要魔术路径('ace / theme / textmate') 我需要的是要求获得对文件(真实文件)的正确引用,并且一旦它被缩小并合并到一个文件中,就具有对ace('ace / theme / textmate')的正确引用。
解决方案是
更改文件夹/文件名结构以模仿预期的内容。所以我在/ ace目录下创建了一个名为mode的文件夹。我将mode-javascript.js重命名为javascript.js并将其放在新模式文件夹中。
我将此文件添加到项目中的define()调用中,以便在需要将其添加到组合文件中时将其选中。
define(['ace / ace','ace / mode / javascript'],function(ace,ace_mode){....
在此之后我没有对ace_mode做任何事情,但我需要让它被requirjs看到才能将它添加到组合文件中。
在此之后我使用魔术字符串就像ace网站所说的那样
editor.getSession()setMode( “ACE /模式/ JavaScript的”);
我为主题做了同样的事情。到目前为止看起来它的工作。我有主题,语法高亮,代码折叠等工作。
还有一件事需要提及。正如我所说,我们的项目是名称空间CXX,并要求在该名称空间生活。 Ace在窗口或其自己的名称空间“ace”中查找需求这些都不是我想要的所以我删除了ace文件底部的代码,该代码尝试启动ace本身并将其分配给全局变量。通过删除它,我的define调用能够加载ace,就像一个大多数正确的AMD模块。居多。