That response wasn't quite right - it was made too late at night. Of course, 
PersonList and PersonEditor do know they're in zones - the zone id is a 
parameter to each. Which has me wondering, have I addressed your issue at all?

On 15/01/2013, at 1:09 AM, Geoff Callender wrote:

> I meant:
> 
>       
> http://jumpstart.doublenegative.com.au/jumpstart/together/gracefulajaxcomponentscrud/persons
> 
> Cheers,
> 
> Geoff
> 
> On 15/01/2013, at 12:31 AM, Geoff Callender wrote:
> 
>> I would recommend using event bubbling. Keep component d unaware of its 
>> container. It should bubble up an event and let c and a decide whether there 
>> is a zone they should refresh.
>> 
>> For an example of this philosophy have a look at 
>> 
>>      
>> http://localhost:8080/jumpstart/together/gracefulajaxcomponentscrud/persons 
>> . 
>> 
>> In it, PersonList and PersonEditor do not know about each other, nor do they 
>> know about their container, Persons, and nor do they know they are in zones. 
>> 
>> - When you modify PersonList's filter, it bubbles up event "filter" and the 
>> container does ajaxResponseRenderer.addRender(listZone);
>> - When you select one of PersonList's entries, it bubbles up "selected" and 
>> the container does 
>> ajaxResponseRenderer.addRender(listZone).addRender(editorZone);
>> 
>> Only Persons knows that there is a list and an editor, so it makes sense for 
>> it to coordinate the responses to the events.
>> 
>> In your case it will be a bit trickier if a zone inside b needs to be 
>> refreshed, but maybe you could move that zone up into a, around b? Nested 
>> zones would be tricky, too, but to date I've always been able to structure 
>> the components in a way that avoids them.
>> 
>> Cheers,
>> 
>> Geoff 
>> 
>> On 15/01/2013, at 12:03 AM, llama-king wrote:
>> 
>>> Reviving my old thread for continuity - just picking up the same train of
>>> thought again. The theme, building some form of 'registry' for zones on a
>>> given page. Either on a per session or environment basis; whatever is seen
>>> to be most suitable.
>>> 
>>> The following example is for the sake of argument and we are making the
>>> assumption that a suitably semantic situation has arisen where it is
>>> entirely logical to want to update zones in this way.
>>> 
>>> Let's say we have this component structure:
>>> <t:a>
>>>    <t:b />
>>>    <t:c>
>>>      <t:d />
>>>    </t:c>
>>> </t:a>
>>> 
>>> All of these components declare one or more zones in their templates, need
>>> to perform multiple zone updates per event and rely on each other in various
>>> ways.
>>> 
>>> An event is triggered in d, it needs to update a zone in its parent
>>> component c as well as in component b. So: d needs a reference to one of c's
>>> zones and one of b's zones so as to either call
>>> ajaxResponseRenderer.addRender(clientId, zone) or return the zone from the
>>> event handler.
>>> 
>>> The current way we do this is by passing c's zone into d as a parameter. To
>>> get at b's zone we have to create a getter for the zone in b, inject
>>> component b in a, create a delegate getter for the zone in a, pass the zone
>>> into c as a parameter and then pass the zone into d as a parameter.
>>> 
>>> The only nice thing about this whole process is in terms of refactoring, if
>>> a zone is removed or renamed, we'll know about it via exception at render
>>> time and won't push a broken site to production. :)
>>> 
>>> So I had a half-baked idea about having some sort of registry for zones;
>>> - components register the injected instances of their zones, something like
>>> Map<String, Zone> where string is ideally the zone's clientid.
>>> - it will hold AjaxResponseRenderer.
>>> - if a component needs to render a bunch of zones in a bunch of places, it
>>> calls the registry's render method and supplies the string keys of the zones
>>> that need to be updated.
>>> 
>>> The nasty thing about this is, if we remove or rename a registered zone,
>>> we'd need to make sure we check all of the hierarchy of components for
>>> references to rendering of that removed or renamed zone.
>>> 
>>> So I ask you fellow Tapestry people - any ideas what do?
>>> 
>>> 
>>> 
>>> --
>>> View this message in context: 
>>> http://tapestry.1045711.n5.nabble.com/Elegant-Handling-of-Multiple-Zones-in-Deep-Hierarchies-of-Components-tp5717698p5719297.html
>>> Sent from the Tapestry - User mailing list archive at Nabble.com.
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>> 
>> 
> 

Reply via email to