के हैंडलर में मान्य है या नहीं, मैं इंटरैक्टिव जावास्क्रिप्ट संपादन के लिए ACE संपादक का उपयोग कर रहा हूं। जब मैं संपादक को जावास्क्रिप्ट मोड में सेट करता हूं, तो एसीई स्वचालित रूप से निर्धारित करता है कि कोड मान्य है या नहीं, त्रुटि संदेश और पंक्ति संख्या के साथ हाइलाइट किया गया है।निर्धारित करें कि जावास्क्रिप्ट सिंटैक्स एसीई
change
ईवेंट हैंडलर के दौरान, मैं यह जानना चाहता हूं कि एसीई सोचता है कि कोड मान्य है या नहीं, इससे पहले कि मैं 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){}
});
हालांकि
:
- एक विशेष वर्ग के साथ यूआई में एक तत्व की उपस्थिति पर लीनिंग बहुत नाजुक, लगता है, लेकिन अधिक महत्वपूर्ण बात,
- पार्सिंग के लिए दृश्य अद्यतन
change
कॉलबैक होता है।
इस प्रकार, मैं वास्तव में (पहले जावास्क्रिप्ट कार्यकर्ता में किक देरी) से अधिक 500ms इंतजार करना:
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
});
वहाँ एक बेहतर तरीका है, जे एस मोड के लिए एक गैर-दस्तावेजी एपीआई में कुछ, यह पूछने के लिए कि क्या कोई त्रुटि है या नहीं?
मैं वास्तव में ऐस के बारे में ज्यादा पता नहीं है, लेकिन आप समझा सकता है तुम क्यों eval उपयोग कर रहे हैं? – hradac
@hradac उससे बेहतर, [मैं आपको दिखाऊंगा] (http://phrogz.net/JS/d3-playground/) (प्रगति पर) काम करता है। – Phrogz
मैं कुछ ऐसा कर रहा हूं और उत्तर देने की भी उम्मीद कर रहा हूं। इवल हर बार चलाने के लिए बहुत महंगा है। – AndrewKS