2011-12-23 10 views
8

मैन्युअल से नहीं समझ सकता: वास्तव में जावा से जेएस फ़ंक्शन कैसे चलाएं?जेएसएनआई के साथ जीडब्ल्यूटी जावा से जावास्क्रिप्ट फ़ंक्शन कैसे चलाएं?

उदाहरण के लिए, मैं अपने html पृष्ठ में एक समारोह है:,

public class Test_GoogleWeb_JSNI_01 implements EntryPoint { 

public void onModuleLoad() { 

    Button fooButton = new Button("Foo!"); 
    fooButton.addClickHandler(new ClickHandler(){ 
     public void onClick(ClickEvent event) { 
      fooRunner(); 
     }; 
    }); 


    HTML fooButtonNative = new HTML(); 
    fooButtonNative.setHTML("<input type='button' value='Foo Native' onclick='foo()'>"); 

    RootPanel rootPanel = RootPanel.get(); 
    rootPanel.add(fooButton); 
    rootPanel.add(fooButtonNative); 

} 

public static native void fooRunner() /*-{ 
    foo(); 
}-*/; 
} 

यह मैनुअल में कहा जाता है कि:

<script type="text/javascript" language="javascript"> 
    function foo() { 
     alert('Foo!'); 
    } 
</script> 

निम्नलिखित मॉड्यूल दो बटन, जिसमें से केवल दूसरा काम करता है पता चलता नेस्टेड फ्रेम के भीतर लागू मूल कार्य, जो स्थिति बताते हैं। लेकिन फिर जेएस कार्यों को कैसे चलाएं?

अद्यतन 1 निम्नलिखित कार्य करता है।

जावा:

public static native void fooRunner() /*-{ 
    $doc.fooRunner(); 
}-*/; 

जे एस:

<script type="text/javascript" language="javascript"> 
    document.fooRunner = function foo() { 
     alert('Foo!'); 
    } 
</script> 

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

उत्तर

4

आपने अपने प्रश्न का उत्तर दिया है। एक बहुत ही सरल कारण के लिए कोई बेहतर तरीका नहीं है: जीडब्ल्यूटी ऐप को तैनात करने के कई तरीके हैं, iframe में चलाना केवल विकल्पों में से एक है। इसलिए यही कारण है कि आपको बाहरी जेएस फ़ंक्शन तक पहुंचने के लिए $ wnd चर का उपयोग करना होगा, इसलिए यदि आप लिंकर स्विच करते हैं, तो आपका अभी भी कोड ठीक काम करेगा।

+0

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

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