2011-06-22 6 views
0

GWTアプリケーションの一部を、phpから呼び出せる多くの個別のダイアログに抽出しようとしています。別のダイアログのライブラリにGWTアプリケーションの一部を抽出する方法

既存の状態: WARとしてJBossにデプロイされたGWTのアプリケーションがあります。 アプリにはサインインエントリポイントを持つ1つのモジュールがあります。 メインJSPは環境を設定し、document.write()を使用して.nocache.jsをロードするJSをいくつか持っています。 エントリポイントのonModuleLoad()は、ブラウザを満たすパネルを作成し、RootPanel.get( "root")を使用してルートに追加します。 いくつかのイベントが発生した(例えば、ユーザーがボタンを押した)我々は(サブクラスをinstatiatingとセンターを呼び出すことによって、ダイアログボックスをポップアップ表示)またはのsetVisible()

望ましい状態: 私たちは、複数のページでPHPアプリをしたい、とさまざまなDialogBoxサブクラスを呼び出すことができます。

私は、PHP側でdocument.write()を使用するJS関数呼び出しを使用する必要があると思います。 GWT側のオプションは次のとおりです。

  1. 複数のエントリポイントを持つ1つのモジュール。
  2. 複数のモジュール。

ここでのベストプラクティスとは何か経験や理解がありますか?

答えて

1

私が正しく理解していれば、JavascriptからGWTメソッドを呼び出す必要があります。 JSNIを使用できます。 しかし、私はGWT側でgwt-exporterを試してみるべきだと思います。 OverviewTutorial。 GWTモジュール用のJS_APIを作成するための単純なGWTモジュールです。

ベストプラクティスではない、簡単な例です。

サーバー側には、すべてのページにダイアログボックスを含む既存のGWTモジュールが含まれています。 このGWTモジュールを変更するか、このように新しいモジュールを作成する必要があります。

public class GwtModule implements EntryPoint { 
@Override 
public void onModuleLoad() { 

    // exportable class 
    DialogBoxManager dbm = new DialogBoxManager(); 

    // export all Exportable classes of module 
    ExporterUtil.exportAll(); 

    // needed cause JS_API will be available only after the GWT is loaded 
    onLoad(); 
} 

// call when GWT module loaded 
private native void onLoad() /*-{ 
    $wnd.loaded(); 
}-*/; 

DialogBoxManagerは、@Exportでこの

@Export 
@ExportPackage("pkg") 
public class DialogBoxManager implements ClickHandler, Exportable { 

    private DialogBox db; 

    public DialogBoxManager() { 

     this.db = new DialogBox(); 
    } 

    @Export("showDB") 
    public void showDialog() { 

     db.setVisible(true); 
     db.center(); 
     db.show(); 
    } 

    @Override 
    public void onClick(ClickEvent event) { 

     showDialog(); 
    } 

} 

文字列値( "ショー")のように見える@ExportPackage( "PKG")などの注釈は注釈付きGWTのための私達のJS_API呼び出しで使用されますメソッド(フィールドもエクスポートできます)。 @Exportだけを使用できます(DialogBoxManagerの場合と同じです)。 GWTモジュールは、あなたのJSライブラリにロードされると

あなたはJS_APIメンバーの初期化を実現することができます。また、

var dbManager = null; 
... 


function loaded() { 
     dbManager = new pkg.DialogBoxManager(); 
    } 

が必要なものをしてからちょうどこの

function showDB() { 
     if (dbManager != null) { 
      dbManager.showDB(); 
     } 
    } 
+0

おかげのようJS_APIを呼び出します。 http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#callingしたがって、私はonModuleLoad()で書くことができます:$ wnd.computeLoanInterest = $ entry(@mypackage。MyUtilityClass :: computeLoanInterest(IFI)); –

+0

新しいプロジェクトがすべてGWTで書かれている場合は、JSNIが選択されます。また、ホストページごとに他のモジュールを集約するのが好ましいモジュールです。しかし、あなたはもっと好きなだけ使うことができます。 – trupanka

関連する問題