2016-12-18 15 views
0

私はすべてのビューのヘッダである共有GWTウィジェット "HeaderView"を持っています。私はそのようにように私の意見の中に注入することができ注射後にDOMからGWTシングルトンウィジェットが削除される

bind(HeaderView.class).asEagerSingleton();

- -

@Inject 
public DashboardViewImpl(HeaderView headerView) { 
    this.headerView = headerView; 
    initWidget(dashboardViewUiBinder.createAndBindUi(this)); 
} 

これは、ビューが表示されて初めて正常に動作します私は経由GINを通してそれをインスタンス化します。ただし、場所を変更して、「HeaderView」が表示されなくなったら、既に表示されているビューに戻ります。 HTMLを検査すると、DOMにはもはや関連付けられていないことが示されます。

私の見解は、シングルトンとしてバインドされている - 私はHeaderViewは、単一の親を持つことが許されているウィジェットのために、次のページをロードした後、DOMから削除されていることを想定しています

bind(DashboardView.class).to(DashboardViewImpl.class).in(Singleton.class);

GWTアプリケーションのすべてのビュー間でウィジェットを共有する正しい方法はありますか?

答えて

2

まず、コンパイラはコードを最適化するのにはかなり優れているので、ウィジェットシングルトンを作ることはコードサイズの面で大した節約にはなりません。それはパフォーマンスを向上させますが、ウィジェットが非常に複雑でない限り目立つことはありません。

あなたのケースでは、ヘッダーはビューの一部であってはなりません。アプリウィジェット、つまりRootPanelに追加するアプリウィジェットに直接追加する必要があります。次に、ブラウザウィンドウの残りの部分が「ビュー」になります。ユーザーがあるビューから次のビューにナビゲートするときに知っておく必要があるヘッダーを、依然として伝えることができます。

関連する問題