GWT アプリケーションに [前へ] ボタンがあり、 History.back()を呼び出すイベント ハンドラーをアタッチしました。
eventBus.addHandler(PrevEvent.TYPE, new PrevEventHandler() {
public void onNext(PrevEvent prevEvent) {
History.back();
System.out.println("Token is" +History.getToken());
}
});
イベントが発生すると、ブラウザーで URL トークンが変更されていることがわかりますが、History.getToken()は最近のトークン自体を出力しています。たとえば、トークンが #A、#B、#C の順に追加された場合、# C にいるときに [前へ] をクリックすると、URL は#Bに変わりますが、getToken は#Cと表示されます。これがonValueChangeメソッドを 呼び出さないという問題を引き起こしていると思うので、アプリは同じままです。
ブラウザの戻るボタンを押してみると、同じことが観察されます。私は firefox を使用していますが、他のブラウザーでの動作は同じです。
その理由は何ですか?
私の認識では、History.back()もonValueChange()を起動しますが、今ではHistory.newItem()だけがその仕事を行うことができるようです。私が間違っている場合は修正してください。私は混乱しています。前の ボタンイベントを処理するにはどうすればよいですか?
eventBus.addHandler(PrevEvent.TYPE, new PrevEventHandler() {
public void onNext(PrevEvent prevEvent) {
History.back();
System.out.println("Token is" +History.getToken());
doPrev();
}
});
private void doPrev(){
System.out.println("Calling Previous Method");
}
アプリのどこかで、現在の履歴トークン #Step3 を使用したコードが前のイベントを発生させます。したがって、前のイベントになると、History.back() を実行し、トークンが #Step2 に戻ることを期待し、次のような onValueChange メソッドを持っています。
public void onValueChange(ValueChangeEvent<String> event) {
String token = event.getValue();
if(token != null){
presenter = null;
if(token == "step1")
{
System.out.println("Step 1");
//do Something
}
else if(token == "step2")
{
System.out.println("Step 2");
//do Something
}
else if(token == "step3")
{
System.out.println("Step 3");
//do Something
}