An earlier version of Tapestry 5 approached this problem by disabling the link components when the zone parameter was in use; that is, the href parameter was written out a "#", so the only way the link would be active is via an attached onclick event handler.
What I really would like to see is the following:
The page renders normally. If a user submits a form or clicks a link before all initialization code has executed, then a popup dialog will appear to inform the user that the page is still loading. When the load is complete, the message changes and the dialog fades out.
Possibly, when a page is loading a more subtle floating "Loading ..." dialog would appear and disappear once the page is, in fact, loaded.
What would it take to accomplish this?
Anyway, this is how I think we should proceed.
I think this would keep compatibility with existing applications.
The cost would be:
- Increment increase in size of tapestry.js
The advantage is less confusion on the client side and server side between normal requests and Ajax partial render requests. The user can't "outrace" the application anymore.
I'd like to see what people think of this plan and collect any comments or observations I've missed.