我使用ACE編輯器進行交互的JavaScript編輯更改處理有效。當我將編輯器設置爲JavaScript模式時,ACE會自動確定代碼是否有效,如果不是,則會顯示錯誤消息和行號。確定是否JavaScript語法是ACE
在change
事件處理程序,我想檢測是否ACE認爲代碼是否有效之前,我試圖eval()
它。我想,我可能做到這一點的唯一方法是:
var jsMode = require("ace/mode/javascript").Mode;
var editor = ace.edit('mycode'), edEl = document.querySelector('#mycode');
editor.getSession().setMode(new jsMode);
editor.getSession().on('change',function(){
// bail out if ACE thinks there's an error
if (edEl.querySelector('div.ace_gutter-cell.ace_error')) return;
try{
eval(editor.getSession().getValue());
}catch(e){}
});
但是:
- 扶着與特定類的UI元素的存在似乎非常脆弱的,但更重要的是,
- 解析視覺更新時後發生的
change
回調。
因此,我居然還要等待超過500毫秒(延遲JavaScript的工人踢前):
editor.getSession().on('change',function(){
setTimeout(function(){
// bail out if ACE thinks there's an error
if (edEl.querySelector('div.ace_gutter-cell.ace_error')) return;
try{
eval(editor.getSession().getValue());
}catch(e){}
},550); // Must be longer than timeout delay in javascript_worker.js
});
有沒有更好的辦法,一些無證API中的JS模式,詢問是否有任何錯誤?
我對ACE沒有太多瞭解,但可以解釋爲什麼使用eval? – hradac 2012-02-29 20:51:03
@hradac比這更好,[我會告訴你](http://phrogz.net/JS/d3-playground/)(正在進行)的工作。 – Phrogz 2012-02-29 21:38:33
我正在做類似的事情,也希望得到答案。每次運行Eval都太昂貴了。 – AndrewKS 2012-03-30 02:41:08