【发布时间】:2013-01-01 13:18:36
【问题描述】:
因此,我尝试将 ACE 嵌入到我正在开发的 Windows 8 JavaScript 应用程序中,但遇到了很多麻烦。这是我用来将我的 <pre id="ace-editor"> 元素转换为 Ace 编辑器的代码。
WinJS.Utilities.ready(function ()
{
var editor = ace.edit('ace-editor');
editor.setTheme('ace/theme/monokai');
editor.getSession().setMode('ace/mode/javascript');
editor.getSession().setTabSize(4);
editor.getSession().setUseSoftTabs(false);
editor.setShowPrintMargin(false);
});
首先,出现了一个重复的光标,带有一点位置和闪烁的时间偏移。请看下面的图片。
其次,一旦我创建了编辑器,我必须调用每个方法两次,这样我才能更改我的编辑器对象的属性。例如,看下面的 sn-p:
editor.setTheme('ace/theme/clouds');
editor.setTheme('ace/theme/clouds');
这就是我需要做的改变主题。调用setTheme() 方法一次是不行的。
现在,我是 Windows 应用商店开发的新手,但经过一番折腾后,如果我删除默认添加的核心 UI 样式表,我可以让光标消失。核心 JS 文件也是如此。如果我删除它们,双重射击问题就会消失。这里有没有人知道为什么会发生这种情况的解决方案或线索?我正在使用 Ace 的非冲突版本,但我也尝试过另一个版本。而且我想这听起来更像是一个 WinJS 问题而不是 Ace,但如果这里有人可以帮助我,那就太好了。
谢谢!
更新:
对于重复光标,ACE 似乎无法正确检测 Windows 应用商店应用环境,因为它没有在其用户代理中使用字符串“Microsoft Internet Explorer”。相反,它是“MSAppHost/1.0”之类的。所以我改变了我的ace.js,现在我检测到两者。这是更新的代码:
(navigator.appName=="Microsoft Internet Explorer"||navigator.appName.indexOf("MSAppHost")>=0)
谢谢,user1743328!
【问题讨论】:
-
您需要提供足够多的代码以及使用它的上下文,最好是骨架足以重现问题。我猜在光标问题上,您需要查看该 UI 样式表并找到光标样式定义的位置并弄清楚如何覆盖它们。两次调用方法的问题,是什么意思?您字面意思必须调用它们两次(一个接一个),或者您调用它们,然后稍后或其他地方也调用它们?如果删除第一个,第二个有用吗?它是在某个事件上被调用的吗?细节,细节。
-
那里。我添加了更多细节。至于核心 JS 和 CSS 资产,我无法更改它们,因为它们是从 Windows 库链接的。
-
好吧,我一直在研究 ACE 处理光标的方式,它本质上是拦截编辑器中的所有鼠标和按键操作,并在一个小的“光标宽度”下按层操作内容"
textarea在页面中穿梭,但从不接受已输入的任何字符。唔。所以你所描述的听起来像textarea没有正确显示,可能是由于ACE 文件的加载方式或其他一些冲突。你有JS debugger 设置吗? -
是的,这正是 Ace 所做的。我使用 DOM Explorer(Visual Studio 调试工具的一部分)看到一个小的
<textarea>漂浮在周围。现在如何重新设置它的样式,使其与另一个光标“同步”。 -
运行的时候有没有JS错误? ACE 使用
pointer-events,this answer 表示 IE 不支持。据我了解,Metro 应用程序是一种网络浏览器(或多或少),所以我想知道 ACE 处理此问题的方式在 Metro 中是否存在问题? ACE 是否明确表示它在 ACE 中有效?或者您是否知道任何其他已经使用它并且具有您可以访问的源代码的项目?很遗憾,我没有安装 Win8 的开发环境。
标签: javascript windows-store-apps ace-editor