2011-10-06 2 views
1

http://code.google.com/webtoolkit/doc/latest/DevGuideMvpActivitiesAndPlaces.html에 설명 된대로 GWT 활동 및 장소를 사용하고 있으며 정상적으로 작동합니다.GWT 활동 및 장소를 사용하면 History.back()을 사용하지 않고 이전 페이지로 이동할 수 있습니까?

기록 상태를 잃고 싶지 않기 때문에 History.back()을 사용하지 않고 특정 페이지에서 이전 페이지로 이동하고 싶습니다. (사용자가 작업을 수행하는 페이지가 있는데 성공하면 이전 페이지로 돌아가서 내역 상태를 유지하고 다른 작업을 취소하면 History.back()을 사용하여 상태를 잃고 싶음) . 내가 placeController.goto(...)

를 호출 할 수 있도록 내가이 작업을 수행하는 생각할 수

있는 유일한 방법은 나에게 사용할 수있는 이전 장소/역사 변경 이벤트를 배치 할 듣고 있습니다 내 자신의 장소/역사 추적 코드를 생성하는 것입니다 이 작업을 수행하는 더 쉬운 방법이 있습니까? 내가 놓친 게 있니?

답변

1

사용자가 취소하는 대신 취소 버튼을 누르는 것만으로 취소를 클릭 할 수 있기 때문에 되돌릴 수 있습니다. 응용 프로그램에 코드가 없으므로 취소를 클릭하는 것과 같으므로 취소 할 필요가 없습니다. 제어.

두 번째로 URL에 기록이있는 경우 사용자는 해당 페이지로 바로 이동할 수 있으며 사용자가 확인을 클릭하면 어디로 이동해야하는지 알 수 있습니다. 또는 사용자가 페이지로 직접 이동하면 사용자를 다른 페이지로 리디렉션합니다.

한 가지 방법은 이동 히스토리 토큰을 이동하는 페이지의 히스토리 토큰에 저장하는 것입니다. 페이지가 끝나면 전달 된 리턴 토큰을 기반으로 해당 페이지로 되돌아 갈 수 있습니다 (기술적으로는 앞으로 진행할 수 있습니다). (GWT를 사용하면 코드에 히스토리 토큰을 쉽게 저장할 수 있습니다).

2

내가 취한 접근법은 제안 된대로 코드에 기록 토큰을 저장하는 것이 었습니다. PlaceController를 확장하고 EventBus에서 장소 변경 사항을 추적하는 데 사용했습니다. 이제는 어디서나 PlaceController를 사용하고 대신 PlaceControllerExt를 사용합니다.이 메서드는 좋은 previous() 메서드를 사용하여 나를 원래 위치로 되돌려 놓습니다. 그러나 앞으로 탐색하고 결코 응용 프로그램을 벗어나지 않습니다.

public class PlaceControllerExt extends PlaceController { 

    private final Place defaultPlace; 
    private Place previousPlace; 
    private Place currentPlace; 

    public PlaceControllerExt(EventBus eventBus, Place defaultPlace) { 

     super(eventBus); 
     this.defaultPlace = defaultPlace; 
     eventBus.addHandler(PlaceChangeEvent.TYPE, new PlaceChangeEvent.Handler() { 

      public void onPlaceChange(PlaceChangeEvent event) { 

       previousPlace = currentPlace; 
       currentPlace = event.getNewPlace(); 
      } 
     }); 
    } 

    /** 
    * Navigate back to the previous Place. If there is no previous place then 
    * goto to default place. If there isn't one of these then it'll go back to 
    * the default place as configured when the PlaceHistoryHandler was 
    * registered. This is better than using History#back() as that can have the 
    * undesired effect of leaving the web app. 
    */ 
    public void previous() { 

     if (previousPlace != null) { 
      goTo(previousPlace); 
     } else { 
      goTo(defaultPlace); 
     } 
    } 
} 
관련 문제