【问题标题】:GWT History onValueChange() not being called未调用 GWT 历史 onValueChange()
【发布时间】:2012-11-23 00:26:25
【问题描述】:

我在一个实现ValueChangeHandler<String>的类中有一个方法,这个类是从onModuleLoad()方法中初始化的,就像这样

mainController = new MainController();
History.addValueChangeHandler(mainController);
mainController.initialise(History.getToken());

initialise() 方法看起来像这样;

public void initialise(String initialToken) {
    if (initialToken.equals("")) {
        History.newItem(String.valueOf(HistoryTokens.MAIN_PAGE), true);
    } else {
        History.newItem(initialToken, true);
    }
}

当应用程序以空白历史令牌启动时,即按下 Launch Default Browser 时,将调用 onValueChange() 方法,在应用程序运行时更改 url 调用 onValueChange()方法。

但是,在空白浏览器选项卡中输入带有标记的 URL(即http://127.0.0.1:8888/MyApp.html?gwt.codesvr=127.0.0.1:9997#mjh&jdfhfh=786543)不会调用onValueChange() 方法。当我点击if 声明的History.newItem(initialToken, true); 部分时,我感到很困惑。我认为这将确保调用onValueChange()。怎么了?

【问题讨论】:

    标签: java gwt gwt-history


    【解决方案1】:

    您应该始终在 GWT onModuleLoad() 的末尾调用 History.fireCurrentHistoryState()。我认为这应该可以解决您的问题。

    问题是第一个历史事件(例如加载 page.com/#xyz 时)没有被 ValueChangeHandler 捕获,您必须使用 History.fireCurrentHistoryState()“伪造”它

    【讨论】:

    • 更准确地说:除非token为空,否则newItem会被当前token调用:token不会改变,所以没有ValueChangeEvent。案例制作。
    • 这并不能完全回答我的问题,但使用您建议的方法确实解决了问题。我尝试使用我的 initialise() 方法设计解决方案,但 fireCurrentHistoryState() 方法效果更好。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 2011-05-30
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多