我的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 中点击上一个时,网址将更改为< strong> #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
}
答案 0 :(得分:3)
看起来像History.back()需要一个很长的时间(字面上很长,大约100毫安:))
我写了一些代码来测试它:
public void onModuleLoad()
{
History.newItem("A");
History.newItem("B");
History.newItem("C");
RootPanel.get().add(new Button("back", new ClickHandler()
{
@Override
public void onClick(
ClickEvent event)
{
System.out.println("After back click token is " + History.getToken());
History.back();
new Timer()
{
@Override
public void run()
{
System.out.println("After 100 millis token is " + History.getToken());
}
}.schedule(100);
}
}));
History.addValueChangeHandler(new ValueChangeHandler<String>()
{
@Override
public void onValueChange(
ValueChangeEvent<String> event)
{
System.out.println("We handle ValueChangeEvent on History. Now token is " + History.getToken());
}
});
}
谷歌浏览器的输出如下
After back click token is C
After 100 millis token is C
We handle ValueChangeEvent on History. Now token is B
After back click token is B
We handle ValueChangeEvent on History. Now token is A
After 100 millis token is A
After back click token is A
We handle ValueChangeEvent on History. Now token is C
After 100 millis token is C
这不是你想要的答案,但它太大而无法评论:)