2010-12-03 4 views
1

Je construis une application de calendrier très simple pour me familiariser avec le MVP-framework introduit avec la version 2.1 de GWT.
Ce que je veux réaliser, c'est pouvoir basculer entre une liste de rendez-vous planifiés et une liste de l'heure disponible.
J'ai créé le a CalendarPlace, CalendarActivity, CalendarView et CalendarViewImpl. Je sais que pour accéder à un autre endroit que je qualifierais PlaceController.goTo (Place), donc dans mon application de calendrier je qualifierais:Comment répondre aux URL avec le framework MVP intégré de GWT?

clientFactory.getPlaceController.goTo(new CalendarPlace("freeTime"); 

L'URL serait index.html # CalendarPlace: Freetime pour la liste de temps libre ou

clientFactory.getPlaceController.goTo(new CalendarPlace("appointments"); 

pour la liste des rendez-vous planifiés. L'URL serait index.html # CalendarPlace: rendez-vous

Mais la question est où dois-je répondre aux différents jetons? Je suppose que le CalendarPlace serait le bon endroit, mais comment ferais-je cela?
Voici mon code source (j'ai pris la majeure partie du passe-partout du tutoriel here:
CalendarPlace:

public class CalendarPlace extends Place { 
    private String calendarName; 
    public CalendarPlace(String token) { 
     this.calendarName = token; 
    } 
    public String getCalendarName() { 
     return calendarName; 
    } 
    public static class Tokenizer implements PlaceTokenizer<CalendarPlace> { 
     @Override 
     public CalendarPlace getPlace(String token) { 
      return new CalendarPlace(token); 
     } 
     @Override 
     public String getToken(CalendarPlace place) { 
      return place.getCalendarName(); 
     } 

    } 
} 

CalendarActivity:

public class CalendarActivity extends AbstractActivity 
    implements 
     CalendarView.Presenter { 
    private ClientFactory clientFactory; 
    private String name; 
    public CalendarActivity(CalendarPlace place, ClientFactory clientFactory) { 
     this.name = place.getCalendarName(); 
     this.clientFactory = clientFactory; 
    } 
    @Override 
    public void goTo(Place place) { 
     clientFactory.getPlaceController().goTo(place); 
    } 
    @Override 
    public void start(AcceptsOneWidget containerWidget, EventBus eventBus) { 
     CalendarView calendarView = clientFactory.getCalendarView(); 
     calendarView.setName(name); 
     calendarView.setPresenter(this); 
     containerWidget.setWidget(calendarView.asWidget()); 
    } 
} 

CalendarViewImpl:

public class CalendarViewImpl extends Composite implements CalendarView { 
    private VerticalPanel content; 
    private String name; 
    private Presenter presenter; 
    private OptionBox optionBox; 
    public CalendarViewImpl() { 
     //optionBox is used for navigation 
     //optionBox is where I call PlaceController.goTo() from 
     optionBox=new OptionBox(); 
     RootPanel.get("bluebar").add(optionBox); 
     content=new VerticalPanel(); 
     this.initWidget(content); 
    } 
    @Override 
    public void setPresenter(Presenter listener) { 
     this.presenter=listener; 
    } 
    @Override 
    public void setName(String calendarName) { 
     this.name = calendarName; 
    } 

    public void displayFreeTime() { 
     //called from somewhere to display the free time 
    } 
    public void getAppointments() { 
     //called from somewhere to display the appointments 
    } 
} 

Répondre

1

Dans votre Constructeur CalendarActivity vous avez accès à l'endroit, et donc le jeton. Tuck it de côté, puis dans votre méthode start() vous pouvez l'utiliser. Les activités sont conçues pour être des objets légers, créés pour chaque nouvelle navigation.

+0

Merci beaucoup d'avoir clarifié cela pour moi. –

Questions connexes