2013-02-10 270 views
0

我對GWT的歷史機制找到的例子有些困惑。GWT歷史記錄 - 州/州是否創建歷史或歷史結果?

尋找並運行示例GWT History它似乎不是很好。

歷史常常被解釋爲由應用程序中的更改導致的結果。

的例子有多個問題:

  • 初始狀態,以及空令牌和令牌「頁0/0」

    - >「歷史記錄」回到顯示在同一頁面兩次離開前」應用程序「

  • 歷史和狀態在某種程度上是間接同步的。

    • 選項卡選項會導致一個選擇事件,該事件設置一個新的令牌。設置令牌導致 歷史值更改,再次選擇相同的選項卡(?)。這種模式是一種心靈扭曲。

難道是錯的來看看從另一個角度看這個問題?

我認爲總是根據歷史記號改變狀態要容易得多。

在這種情況下,ValueChange將執行「狀態呈現」。要改變狀態的按鈕不會直接執行,而是使用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");     
     } 
    }); 

這在某種程度上利用歷史來驅動應用的狀態。

這是怎麼回事,爲什麼到處都是這樣?

回答

0

GWT歷史確實提供了一種方法來設置令牌without causing the on history changed method to be calledHistory.newItem("registration", false);

至於你的建議,特別是關於單獨GWT歷史,ValueChange將貫徹落實「國務院渲染」,在這裏你需要傳遞,不會在情況下工作多於一個字符串來設置狀態。在這種情況下,我如上設置了一個標記,然後使用MVC將任何需要的數據轉發到視圖進行渲染。

在任何情況下,我絕對不會通過onValueChange來選擇一個選項卡。我用相當類似tabPanel.selectTab(tabNum);

FWIW,GWT的當前狀態從思維只是歷史搬到使用Activities and Places

您可能希望看到,作爲也許與你想有什麼更好的對齊的事情。