【问题标题】:GWT History - Does state create History or History results in state?GWT 历史 - 状态是否在状态中创建历史或历史结果?
【发布时间】:2013-01-25 17:06:41
【问题描述】:

我对我找到的 GWT 历史机制的例子有点困惑。

查看并运行示例GWT History 似乎不是很好。

历史通常被解释为应用程序更改的结果。

该示例存在多个问题:

  • 初始状态也是空token和token“page0”

    --> “历史” Back 在“离开应用程序”前两次显示同一页面

  • 历史和状态以某种方式间接同步。

    • 选项卡选择会导致选择事件,该事件会设置一个新标记。设置令牌会导致 历史值更改,再次选择相同的选项卡 (?)。这种模式有点令人费解。

换个角度看问题会不会这么错?

我认为总是根据历史令牌更改状态会更干净。

在这种情况下,ValueChange 将实现“状态渲染”。想要改变状态的 Button 不会直接使用History.newItem() 方法来改变状态,并使用valueChange 方法间接改变状态。

例如

public void onValueChange(ValueChangeEvent<String> event) {
    String token = event.getValue();
    if(token.isEmpty()){
        show("welcome");
    }else if(token.equals("registration")){
        show(token);
    }
}

还有一个想要显示注册的按钮:

welcome = new Button("Registration", new ClickHandler() {           
        @Override
        public void onClick(ClickEvent event) {
            History.newItem("registration");                
        }
    });

这以某种方式使用历史来驱动应用程序状态。

这有什么问题,为什么到处都是反其道而行之?

【问题讨论】:

    标签: java gwt browser-history gwt-history


    【解决方案1】:

    GWT History 确实提供了一种设置令牌的方法 without causing the on history changed method to be called History.newItem("registration", false);

    至于您专门针对 GWT 历史的建议,ValueChange 将实现“状态渲染”,这在您需要传递多个字符串来设置状态的情况下不起作用。在这种情况下,我如上所述设置了一个标记,然后使用 MVC 将所需的任何数据转发到视图进行渲染。

    无论如何,我绝对不会通过 onValueChange 来选择选项卡。我使用类似tabPanel.selectTab(tabNum);

    FWIW,GWT 思维的当前状态从历史转移到使用 Activities and Places

    您可能希望看到这一点,因为它可能更符合您正在尝试做的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      相关资源
      最近更新 更多