2011-12-23 17 views
6

क्या जावास्क्रिप्ट से जावा (जीडब्ल्यूटी) विधियों को कॉल करना संभव है? यह दस्तावेज़ीकरण से भी अस्पष्ट है। यहां सभी नमूने http://code.google.com/intl/ru/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html जेएसएनआई (जेएस नहीं) कार्यों से जावा कार्यों को कॉल करने का प्रदर्शन करते हैं।जावास्क्रिप्ट से GWT जावा फ़ंक्शन को कैसे कॉल करें?

public class Test_GoogleWeb_JSNI_02 implements EntryPoint { 
/** 
* This is the entry point method. 
*/ 
public void onModuleLoad() { 
} 

public static void Callee() { 
    Window.alert("Callee"); 
} 
} 

यहाँ html में फोन करने वाले बटन नमूने है:

<input type='button' value='Call' onclick='Test02()'> 

और यहाँ कुछ कार्यों मैंने कोशिश की और जो थे

अद्यतन 1

यहाँ एक जावा कोड है काम नहीं किया:

<script type="text/javascript"> 

    function Test01() { 
     @com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()(); 
    } 

    function Test02() { 
     com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()(); 
    } 


</script> 

अद्यतन 2

काम के बाद।

जावा तैयारी:

public void onModuleLoad() { 
    Prepare(); 
} 

public static native void Prepare() /*-{ 
    $doc.calleeRunner = @com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee(); 
}-*/; 

public static void Callee() { 
    Window.alert("Callee"); 
} 

कॉलर:

function Test03() { 
     document.calleeRunner(); 
} 

वहाँ एक बेहतर तरीका है?

+0

आप एक javascrypt विधि है कि एक वस्तु रिटर्न कॉल कर सकते हैं? और उस वस्तु का उपयोग करें? –

उत्तर

10

आपका उदाहरण काम नहीं करेगा, क्योंकि आप कुछ बाहरी लिपि में जेएसएनआई का उपयोग करने की कोशिश कर रहे हैं। आप बाहरी जे एस से कुछ कॉल करना चाहते हैं, तो आप इस question में वर्णित दृष्टिकोण का उपयोग या उपयोग करने की आवश्यकता GWT exporter

अद्यतन:

GWT सामान बेनकाब करने के लिए सबसे सुरक्षित तरीका कुछ अन्य में मंगलाचरण रैप करने के लिए है समारोह। उदाहरण के लिए:

public native void expose()/*-{ 
    $wnd.exposedMethod = function(param){ 
     @com.my.MyClass::myFunction(*)(param); 
    } 
}-*/; 

नहीं तो आप उत्पादन मोड में कुछ अजीब कीड़े का सामना कर सकते =)

+0

धन्यवाद! क्या आप मेरे अपडेट 2 को अपडेट करते हैं? मेरा मतलब है कि आप '[email protected] :: myFunction (*) (param) 'लिखने का सुझाव नहीं देते हैं? क्यूं कर? – Dims

+0

यह जीडब्ल्यूटी को कुछ बुनियादी अनुकूलन करने से रोक सकता है। प्रदर्शन प्रभाव अधिकतर बड़ा नहीं होगा, लेकिन आपको इसे ध्यान में रखना चाहिए। इसके अलावा आपका तरीका केवल स्थिर तरीकों के संपर्क में काम करेगा, यदि आप कुछ उदाहरण विधि को कॉल करने का प्रयास करते हैं तो यह सबसे अधिक संभावना है। – jusio

+0

क्या आप एक जावास्क्रिप्ट विधि को कॉल कर सकते हैं जो ऑब्जेक्ट लौटाता है? और उस वस्तु का उपयोग करें? –

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