2013-07-11 25 views
2

我們有一個項目,是基於網絡的,但是需要有用戶的文件系統訪問顯著。 HTML不(還)可以讓我們足夠的訪問,因爲我們主要是一個Grails店,具有文件訪問代碼作爲一個applet更爲明智不是它是閃存的代碼。如何從JavaScript調用Griffon applet中的函數?

我們已經涉足Griffon(此項目的前一個原型是一個100%Griffon Webstart應用程序),並且非常喜歡Griffon爲小程序提供的結構和「樣板刪除」。然而,我們不斷遇到的問題是將Html/JavaScript UI連接到實際完成所有工作的Griffon小程序。

我們發現詹姆斯威廉斯從Griffon應用程序調用JavaScript函數的excellent example,但還沒有找到相反的例子:從JavaScript端調用Griffon函數。

的主要問題是,我們希望有格里芬的應用程序是「無頭」(或儘可能接近我們可以得到),因爲所有的UI都將通過JavaScript和HTML來處理。這意味着我們不能使用Griffon應用程序中觸發的UI事件,這正如James在他的例子中所做的那樣。

任何人都不會有的JavaScript與格里芬的小程序,我們可以借鑑的交互的例子嗎?或者有關如何將Griffon小程序內的東西展示給JavaScript的任何建議?

回答

2

聽起來我想要調用一個Java(或groovy!)函數在外部世界使用JavaScript在Applet中發現,對吧?

爲了這個工作:

  1. 必須是LiveScript啓用applet的罐子必須簽署

  2. 下一步是在applet子類中定義一個入口點,該入口點知道如何處理要撥打的電話

    這就是棘手的地方,因爲默認的applet類是griffon.swing.SwingApplet,因此您必須創建自己的griffon.swing.SwingApplet的子類並將其用作主入口點。

    你的子類是定義方法(或方法)從JavaScript端可調用的一個。這應該是沿着線的東西:

    import griffon.swing.SwingApplet; 
    
    public class MySwingApplet extends SwingApplet { 
        // match superclass constructors 
        public CalculatorApplet(String[] args) { 
         super(args); 
        } 
    
        public Object myAppletMethod(String[] args) { 
         // args come form the JS world 
         // do whatever is necessary here 
        } 
    } 
    
  3. 告訴格里芬使用我們自定義的小程序子類,而不是默認,只需創建一個名爲griffon-app/scripts/_Events.groovy文件,裏面放上如下:

    eventPackageAppStart = {   
        griffonAppletClass = 'calculator.CalculatorApplet'   
    } 
    
  4. 最後,從JavaScript小應用程序對象的搶保持和調用myAppletMethod()與您認爲合適的任何值:

    <script> 
        function talkToApplet() { 
         var r = document.applets.myAppletId.myAppletMethod("arg1", "arg2"); 
         alert(r); 
        } 
    </script> 
    

more detailed example可以my blog找到。

+1

我已經添加了關於如何讓這個東西啓動和運行的更詳細的描述,你可以在這裏找到它http://www.jroller.com/aalmiray/entry/griffon_calling_application_methods_from – aalmiray

+0

這個例子的工作原理是什麼?沒有任何東西,所以基本上是1px x 1px的框架?或者有沒有更好的方法,使它不在網頁上顯示,本質上是一個功能更強大的JS庫?並打開文件對話框正常工作? – cdeszaq

+0

當然,即使使用1x1像素幀也應該可以工作。如果小程序不可見,那麼它將不會被加載,因此您必須至少使它成爲1x1像素大 – aalmiray