2013-02-10 4 views
0

Я немного озадачен примерами, которые я нахожу для механизма истории GWT.История GWT. Состояние штата создает историю или историю в состоянии?

Взяв пример и запустив пример GWT History, это выглядит не очень хорошо.

История часто объясняется тем, что происходит в результате изменений в приложении.

Пример имеет несколько проблем:

  • исходное состояние, а также пустой маркер и маркер «page0»

    -> «История» Назад показывает ту же страницу дважды «уходящая приложение «

  • История и состояние синхронизированы как-то косвенно.

    • Выбор вкладки вызывает событие выбора, которое устанавливает новый токен. Настройки маркера приводят к изменению значения , которое снова выбирает ту же вкладку (?). Эта модель - это своего рода раздумье.

бы это было так неправильно, чтобы посмотреть на проблему с другой точки зрения?

Я думаю, что было бы намного чище всегда менять состояние в соответствии с токеном истории.

В этом случае 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 будет осуществлять «государственный рендеринг», что не будет работать в тех случаях, когда вам необходимо пройти больше, чем String для установки состояния. В таком случае я устанавливаю токен, как указано выше, а затем использую MVC для пересылки любых данных, необходимых для представления для рендеринга.

В любом случае, я определенно не перехожу к onValueChange, чтобы выбрать вкладку.Я использую скорее что-то вроде tabPanel.selectTab(tabNum);

FWIW, современное состояние GWT мышления переехал из только истории с помощью Activities and Places

Вы можете видеть, что, как, возможно, это лучше совмещается с тем, что вы пытаетесь сделать.