0

GWT の History メカニズムで見つけた例については、少し当惑しています。

GWT Historyの例を見て実行すると、あまり良くないようです。

歴史は、多くの場合、アプリケーションの変更に起因するものとして説明されます。

この例には複数の問題があります。

  • 初期状態も空のトークンとトークン「page0」です

    --> 「履歴」戻ると「アプリを離れる」前に同じページが 2 回表示される

  • 履歴と状態は何らかの形で間接的に同期されます。

    • タブを選択すると選択イベントが発生し、新しいトークンが設定されます。トークンを設定すると履歴値が変更され、同じタブが再度選択されます (?)。そのパターンは一種のマインドツイストです。

問題を別の視点から見るのはそんなに間違っているでしょうか?

履歴トークンに従って常に状態を変更する方がはるかにクリーンだと思います。

その場合ValueChange、「状態レンダリング」を実装します。状態を変更したいボタンは、メソッドを使用して直接ではなく、History.newItem()メソッドを使用して間接的に状態を変更しvalueChangeます。

例えば

public void onValueChange(ValueChangeEvent<String> event) {
    String token = event.getValue();
    if(token.isEmpty()){
        show("welcome");
    }else if(token.equals("registration")){
        show(token);
    }
}

そして、登録を表示したいボタン:

welcome = new Button("Registration", new ClickHandler() {           
        @Override
        public void onClick(ClickEvent event) {
            History.newItem("registration");                
        }
    });

これはどういうわけか履歴を使用してアプリケーションの状態を駆動しています。

それの何が問題なのですか、なぜどこでも逆に行われているのですか?

4

1 に答える 1

0

GWT History は、on history changed メソッドを呼び出さずにトークンを設定する方法を提供します。 History.newItem("registration", false);

特に GWT History だけに関するあなたの提案については、ValueChange は「状態レンダリング」を実装します。これは、状態を設定するために文字列以上を渡す必要がある場合には機能しません。このような場合、上記のようにトークンを設定し、MVC を使用して、必要なデータをビューに転送してレンダリングします。

いずれにせよ、タブを選択するために onValueChange を使用することは絶対にありません。私はむしろ次のようなものを使用しますtabPanel.selectTab(tabNum);

FWIW、GWT の考え方の現在の状態は、単なる歴史からアクティビティと場所の使用に移行しました

おそらくそれはあなたがやろうとしていることとよりよく一致しているので、それを見たいと思うかもしれません.

于 2013-02-11T00:01:41.743 に答える