gpt4 book ai didi

javascript - GWT History.back() 没有触发 onValueChangeHandler

转载 作者:行者123 更新时间:2023-11-29 20:07:31 26 4
gpt4 key购买 nike

我的 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 token 被更改,但是 History.getToken() 正在打印最近的 token 本身。例如,如果标记是按 #A、#B、#C 的顺序添加的,当我在 #C 中单击上一步时,URL 会更改为 < strong>#B,但 getToken 显示它的 #C.我认为这会导致无法调用 onValueChange 方法的问题,因此我的应用保持不变。

当我尝试使用浏览器的后退按钮时,观察到同样的情况。我使用的是 Firefox,但在其他浏览器中的行为没有什么不同。

可能是什么原因?

我的看法是 History.back() 也会触发 onValueChange(),现在看来只有 History.newItem()> 就可以胜任这份工作了。如果我错了,请纠正我。我很困惑。我该如何处理 previous 按钮事件呢?

       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() 并且我希望 token 返回到 #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
}

最佳答案

看起来 History.back() 需要很长时间(字面意思是很长,大约 lOO 毫秒 :))

我写了一些代码来测试它:

    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

这不是你想要的答案,但它太大了无法评论:)

关于javascript - GWT History.back() 没有触发 onValueChangeHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11407470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com