1

今朝、私はこの質問をして、本当に素晴らしい答えを受け取りました. 現在、デザインのプロトタイプを作成しようとしていますが、同様の (ただし同じではない) 問題が発生しています。基本的に、私は 100% 構成主導型の GWT UI を作ろうとしています。DB を変更すると、根本的に異なる UI を生成できますが、コードを変更する必要はありません。

私のアーキテクチャは単純です:

  • 別のツールを使用して (または最初は手動で) .xul (XUL) ファイルを作成し、データベースに保存します。おそらく Mongo などのドキュメント データベース
  • サーバー側でXulParserは、データベースから XUL ファイルを読み取り、それをContainerProxyインスタンス に変換する を記述します。
    • Aは、 aまたは類似のものContainerProxyに相当する私の「プロキシ」です。com.google.gwt.user.client.ui.Panelこれは、他のウィジェット プロキシのリストを含む単なる Bean/POJO です (以下のコード スニペットを参照)。
    • たとえば、次のButtonようなものを定義する XUL ファイルがあるとします。
    • これは(同じコンテナー/ビュー/パネル内の他の UI ウィジェットと共に) にButtonProxy追加されます。ContainerProxy
  • クライアント側では、ContainerProxy どういうわけか (???)を照会し、サーバーからプルダウンします。
  • ContainerProxy次に、の各子 (ButtonProxyなど) を実際の UI ウィジェットに変換するメカニズムを作成します。

このようにして、最初に特定の XUL ファイルをデータベースに入れることができ、UI には「今すぐ注文」ボタンしか含まれていない場合があります。しかし将来的には、まったく別の UI を使用したくなるかもしれないので、別の XUL ファイルを設計し、データベース内のドキュメントを更新すると、ほら、コードを変更することなく、すべてのユーザーの UI が変更されます。: これは通常の方法ではないことは理解しています。このような構成駆動型の UI が必要な特別なユース ケースがあります。

XUL 解析プロセスを明確にするために、次のようにします。

<button id="order" label="orderNow" clickHandler="org.myapp.OrderButtonHandler" />

after the XulParser reads the above snippet, we get:

ButtonProxy orderButton = new ButtonProxy("order", "OrderNow");
orderButton.addClickHandler(new OrderButtonHandler());

とにかく、私の質問:

  1. をクエリするには、クライアント側で何をする必要がありますContainerProxyか? 視覚化するのに役立つ疑似コードを提供できる人はいますか?
  2. ContainerProxyクライアント側で を取得したら、プロキシされたクラスを実際の UI ウィジェットに変換するために使用できる UI メカニズムは何ですか? UIBinder は利用できますか? 繰り返しますが、誰かが疑似コードを提供できますか?

ここで助けてくれてありがとう!

4

1 に答える 1

1

これは、あなたが望むことを行うコードのアイデアです。私はこれをテストしていませんが、すべてがどのように連携するかを理解することができます。

    String htmlFragment = "<div><button id='action1' type='button>Action 1<button/><div/>";

    HTMLPanel container = new HTMLPanel(htmlFragment);

    RootLayoutPanel.get().add(container);

    Element button1El = container.getElementById("action1");

    if(button1El != null){
        Button button1 = Button.wrap(button1El);
        button1.addClickHandler(new ClickHandler(){

            @Override
            public void onClick(ClickEvent event) {
                // What you want button 1 to do
            }

        });
    }
于 2013-05-12T11:36:06.323 に答える