我的 GWT 应用程序中有一个 Previous 按钮,我附加了一个调用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
}