2010-06-19 15 views
5

मैं राइनो का उपयोग कर जावा एप्लिकेशन में कुछ जावास्क्रिप्ट एम्बेड कर रहा हूं। मैं राइनो वेबसाइट पर उदाहरण का पालन कर रहा हूं, कॉन्टेक्स्ट के मूल्यांकन स्ट्रिंग विधि को कॉल करके और स्क्रिप्ट के रूप में वास्तविक स्क्रिप्ट को पास करके एक स्क्रिप्ट निष्पादित कर रहा हूं।राइनो, एकाधिक जावास्क्रिप्ट फ़ाइलों से कोड जोड़ना

मेरे पास मौजूदा जावास्क्रिप्ट कोड का पूरा समूह है जिसका मैं उपयोग करना चाहता हूं। मैं इसे सभी को एक विशाल स्ट्रिंग में जोड़ना नहीं चाहता हूं और मूल्यांकन करने के लिए इसे पास करना चाहता हूं। मैं कोड को लोड करने में सक्षम हूं ताकि मैं इसे कोड से कॉल कर सकूं जिसे मैं मूल्यांकन में पास करता हूं स्ट्रिंग (जैसे कि एडकोड विधि माइक्रोसॉफ्ट के स्क्रिप्टिंग नियंत्रण में काम करता है)। मैं कोड जोड़ना चाहता हूं जैसे कि मैं वर्तमान में ScriptableObject.putProperty विधि का उपयोग कर चर जोड़ सकता हूं।

क्या ऐसा करने का कोई तरीका है? क्या कोई कोड स्निपेट या दस्तावेज़ीकरण के लिए एक लिंक प्रदान कर सकता है। धन्यवाद!

+0

अपने सभी जावास्क्रिप्ट कोड को एक फ़ाइल में रखें। फ़ाइल को 'स्ट्रिंगवाइटर' में पढ़ें और इसकी 'toString' विधि का उपयोग करें। अब संपूर्ण जावास्क्रिप्ट कोड को पार्स करने के लिए 'मूल्यांकन स्टेटिंग' का उपयोग करें और 'स्क्रिप्ट योग्य' ऑब्जेक्ट वापस करें। इसके बाद आप स्कोप में किसी ऑब्जेक्ट तक पहुंचने के लिए स्क्रिप्टबेल के 'get (स्ट्रिंग नेमस्पेस, स्क्रिप्ट योग्य जेएसओब्जेक्ट) विधि' का उपयोग कर सकते हैं। – FK82

+0

बस एक टिप्पणी: यदि आप एक निरंतरता-गुजरने वाले पैटर्न को सक्षम करना चाहते हैं (जैसे आपने कहा) आपको सभी प्रासंगिक कार्यों को दायरे के भीतर रखना होगा और 'Function.call (स्क्रिप्ट योग्य संदर्भ, स्क्रिप्ट योग्य स्कोप, स्क्रिप्ट योग्य इस ऑब्जेक्ट' में उस दायरे को घोषित करना होगा, वस्तु [] तर्क) '। इसलिए, मैं वास्तव में टुकड़ों में अपने कोड को विभाजित करने का लाभ नहीं देखता हूं। – FK82

उत्तर

2

documentation और examples से ऐसा लगता है कि पहले मूल्यांकन किए गए ऑब्जेक्ट्स के संदर्भ scopes द्वारा नियंत्रित किए गए हैं।

Context context = Context.enter(); 
try { 
    ScriptableObject scope = context.initStandardObjects(); 
    Object out = Context.javaToJS(System.out, scope); 
    ScriptableObject.putProperty(scope, "out", out); 
    context.evaluateString(scope, 
     "function foo() { out.println('Hello, World!'); }", "<1>", 1, null); 
    context 
     .evaluateString(scope, "function bar() { foo(); }", "<2>", 1, null); 
    context.evaluateString(scope, "bar();", "<3>", 1, null); 
} finally { 
    Context.exit(); 
} 

(राइनो 1.7 रिलीज 2)


मैं जानता हूँ कि कुछ लोगों को राइनो का उपयोग सीधे नवीनतम संस्करण प्राप्त करने के लिए, लेकिन Java 6 implementation इस तरह स्क्रिप्ट का मूल्यांकन कर सकते हैं:

ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js"); 
engine.eval("function foo() { println('Hello, World!'); }"); 
engine.eval("function bar() { foo(); }"); 
engine.eval("bar();"); 
0

मेरे कोड में मुझे इसकी ज़रूरत थी (उपयोगिता स्क्रिप्ट और इस तरह), और मैंने बस उन्हें एक विशाल स्ट्रिंगबिल्डर में एक साथ जोड़ दिया और इसे हटा दिया (जावा एक 6)। जावास्क्रिप्ट नहीं कर सकता है (जावा रैपर ऑब्जेक्ट्स के बिना) यह एकमात्र तरीका है अन्य jSScript.someUsefulFunction()।

संबंधित मुद्दे