Comments inline. On Wed, Jan 20, 2010 at 4:38 PM, Jeff Chimene <[email protected]> wrote:
> Comments inline. > > On 01/20/2010 11:10 AM, Eduardo Nunes wrote: > > Comments inline. > > > > On Wed, Jan 20, 2010 at 3:54 PM, Jeff Chimene <[email protected] > > <mailto:[email protected]>> wrote: > > > > Comments inline. > > > > On 01/20/2010 10:06 AM, Eduardo Nunes wrote: > > > Comments inline. > > > > > > On Wed, Jan 20, 2010 at 2:46 PM, Jeff Chimene <[email protected] > > <mailto:[email protected]> > > > <mailto:[email protected] <mailto:[email protected]>>> wrote: > > > > > > Hi Eduardo: > > > > > > Comments inline. > > > > > > On 01/20/2010 09:34 AM, Eduardo Nunes wrote: > > > > I'm using a different approach, below a draft source code of > my > > > > AppController class. What do you think? > > > > > > > > public class AppController implements > > ValueChangeHandler<String> { > > > > > > > > private final Map<String, PresenterType> urls; > > > > private final Map<PresenterType, Provider<? extends > Presenter>> > > > presenters; > > > > > > > > @Inject > > > > public AppController() { > > > > > > > > urls = new TreeMap<String, PresenterType>(); > > > > > > Could you expand a bit on why the choice of TreeMap vs. > > another HashMap? > > > > > > > > > Usually when I have a String as a key, I use TreeMap, it's faster > > to get > > > the information but slower to add. In this case the add process > will > > > happen just once, so it's not a problem. > > > > Check. > > > > > > > > > > > > presenters = new HashMap<PresenterType, Provider<? extends > > > Presenter>>(); > > > > > > > > urls.put("/contacts/list", PresenterType.CONTACT_LIST); > > > > > > > > History.addValueChangeHandler(this); > > > > > > > > } > > > > > > > > @Override > > > > public void onValueChange(ValueChangeEvent<String> event) { > > > > > > > > final PresenterType presenterType = > urls.get(event.getValue()); > > > > > > > > if (presenterType != null) { > > > > > > > > final Provider<? extends Presenter> presenter = presenters > > > > .get(presenterType); > > > > > > Is there a way to do this asynchronously at startup? I'm > > interested in > > > the shortest response time during event handling. > > > > > > > > > What do you mean by asynchronously in this case? > > > > Command(new IncrementalCommand(){}). > > > > > > you can change the implementation to something like this: > > public void onValueChange(ValueChangeEvent<String> event) { > > > > final PresenterType presenterType = urls.get(event.getValue()); > > > > if (presenterType != null) { > > > > GWT.runAsync(new RunAsyncCallback() { > > @Override > > public void onSuccess() { > > final Provider<? extends Presenter> presenter = presenters > > .get(presenterType); > > > > final Presenter<? extends Display> instance = presenter > > .get(); > > instance.bind(); > > > > RootPanel.get().add(instance.getDisplay().asWidget()); > > } > > > > @Override > > public void onFailure(Throwable reason) { > > } > > }); > > > > } > > > > } > > Good. Thanks for that. > > > > > However, see the next comment. > > > > > > > > > > > > > > > > > > > final Presenter<? extends Display> instance = > presenter.get(); > > > > instance.bind(); > > > > > > Ibid. > > > > > > > > > > > RootPanel.get().add(instance.getDisplay().asWidget()); > > > > > > > > } > > > > > > > > } > > > > > > > > @Inject > > > > void > > configureContactListPresenter(Provider<ContactListPresenter> > > > > presenter) { > > > > presenters.put(PresenterType.CONTACT_LIST, presenter); > > > > > > Ibid. I don't understand why the get() can't be done here (i.e. > > > asynchronously at startup) > > > > > > > > > If I do the get, google-gin will create the whole object tree > > connected > > > to this presenter, in this case it will create the view too. This > > means > > > that at startup time, all presenters and views will be created, > > which in > > > my opinion isn't good. > > Agreed. Just to be clear: even though there isn't a get() call, due to > gin magic, we still get instantiation of the > Provider<ContactListPresenter> presenter at startup time. > > > > > OK. So the above ValueChange().get() returns a previously > instantiated > > object. Negligable overhead when have maximum user attention. Check. > > > > > > Each time you call Provider.get() google-gin will check the scope of the > > object type, if I define that the ContactListPresenter has a SINGLETON > > scope, than the object will be instantiated just once, otherwise it will > > be instantiated in each call of Provider.get() method. > > OK. I was thinking of gwt-mvp-sample (is that the name?) where there was > an idiom like > > Presenter myPresenter = ensureMyPresenter(); > > Presenter ensureMyPresenter() { > if myPresenter == null { > myPresenter = myPresenter.get(); > } > return myPresenter; > } > > I use the ensureMyPresenter pattern when I have some optional presenters controller by one presenter. > But I see that you've adopted gin + @singleton annotation to accomplish > the same results. > > Check. > > > > > I did some tests using the GWT.runAsync, it worked perfect in google > > chrome but it didn't work in IE7, I don't know why. I have a specific > > method configureNAME_OF_THE_PRESENTER for each presenter, due to the > > fact that I need google-gin to initialize them, otherwise I will have to > > initialize them by hand. > > Why choose runAsync() over IncrementalCommand() (or to get closer to the > simple case of one action per Command(), DeferredCommand())? > > Actually at first moment, when you mentioned asynchronously, I thought that you want to split your code and run it async, that's why I used GWT.runAsync method. I'm not familiar with the DerreferedCommand and IncrementalCommand interface, but after a fast read, I think you can use it too. You will have the same user experience but your application code will be loaded just once, not on demand. > Again, thanks for your detailed responses. > > Cheers, > jec > > > > -- > You received this message because you are subscribed to the Google Groups > "Google Web Toolkit" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<google-web-toolkit%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/google-web-toolkit?hl=en. > > > > -- Eduardo S. Nunes http://enunes.org--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to [email protected].
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
