3

こんにちは私はGWTサンプル履歴管理アプリケーションに取り組んでいます。これが私のonModuleLoadコードです。

public void onModuleLoad() {
    ContentPanel panel = ContentPanel.getInstance();
    if(History.getToken()!=null && History.getToken().length()==0)
    {
        History.newItem("first_page");
    }
    History.addValueChangeHandler(new HistoryHandler());
    RootPanel.get().add(panel);
    History.fireCurrentHistoryState();
}

これで私はHistory.fireCurrentHistoryState();を起動しました。歴史の現在の状態を起動します。私のfirstPanelクラスには、履歴トークンsecond_pageが起動されるSecondPanelという名前のボタンがあります。

public FirstPanel() {
    VerticalPanel panel = new VerticalPanel();
    Button button2 = new Button("Second Panel");
    button2.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            History.newItem("second_page");
        }
    });
    panel.add(button2);
    initWidget(panel);
}

ただし、ここではHistory.fireCurrentHistoryState()を起動する必要はありません。また。単にhistt​​ory.newItemは正常に機能します。

ここで、モジュールのロード時にのみHistory.fireCurrentHistoryState()が必要なことを知りたいですか?また、なぜそれがアプリケーションで2回目に必要とされないのですか?

4

1 に答える 1

3

History.fireCurrentHistoryState()ブラウザの履歴スタックに新しい履歴アイテムを実際に挿入せずに履歴ハンドラを呼び出しますが、履歴スタックにHistory.newItem(token)新しい履歴トークンを挿入します。

注:現在のトークンが新しいトークンと同じである場合(つまり、同じページがリロードされる場合)、ブラウザーはこれを履歴スタックに挿入しません。この場合(現在のトークン==新しいトークン)History.fireCurrentHistoryState()は、と同じ効果がありHistory.newItem(currentToken)ます。

于 2011-08-03T12:36:26.537 に答える