[ 
https://issues.apache.org/jira/browse/TAP5-2383?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14121172#comment-14121172
 ] 

Lance edited comment on TAP5-2383 at 9/4/14 9:34 AM:
-----------------------------------------------------

{quote} Sibling components should not be aware of each other (per 
default).{quote}
I totally agree. And pub/sub allows this decoupling.
{quote}If one want to soften this compartmentalization it is a matter of making 
your own pub/sub mechanism or use a 3rd party lib.{quote}
Or option 3 is that we add this useful tool to tapestry-core, which is exactly 
what this jira is discussing. 

I can see that you are not in favor of it. But others have come across the use 
case where one deeply nested component needs to affect another component on an 
unrelated section on the page. This solves that problem.


was (Author: uklance):
{quote} Sibling components should not be aware of each other (per 
default).{quote}
I totally agree. And pub/sub allows this decoupling.
{quote}If one want to soften this compartmentalization it is a matter of making 
your own pub/sub mechanism or use a 3rd party lib.{quote}
Or we could add a new tool to the tapestry toolbox. Which is exactly what this 
jira is discussing. I can see that you are not in favor of it. But others have 
come across the use case where one deeply nested component needs to affect 
another component on an unrelated section on the page. This solves that problem.

> Serverside publish / subscribe mechanism
> ----------------------------------------
>
>                 Key: TAP5-2383
>                 URL: https://issues.apache.org/jira/browse/TAP5-2383
>             Project: Tapestry 5
>          Issue Type: New Feature
>          Components: tapestry-core
>            Reporter: Lance
>            Priority: Minor
>
> In some cases, an event in one component should cause an action (eg ajax 
> update) in another. When these components are siblings it sometimes gets 
> tricky having to pass zone id's around and having one component update the 
> other.
> It would be nice to decouple the components with a serverside pub/sub 
> mechanism. Here's an initial brain dump on how it could work.
> {code:java}
> public class EditPersonComponent {
>    @Parameter
>    private Person person;
>    @Inject
>    private PersonDao personDao;
>    @Inject
>    private ComponentResources componentResources;
>    // lets assume there's a form in the component which gets posted
>    void onSuccessFromPersonForm() {
>       personDao.save(person);
>       componentResources.publish("personUpdated", person); // new method on 
> ComponentResources
>    }
> }
> {code}
> {code:java}
> public class SomeOtherComponent {
>    @Inject 
>    private AjaxResponseRenderer ajaxResponseRenderer;
>    @Property
>    private Person person;
>    @Inject
>    private Zone personZone;
>    // new subscribe annotation (and naming convention?)
>    @Subscribe("personUpdated")
>    void onPersonUpdatedPublished(Person person) {
>       this.person = person;
>       ajaxResponseRenderer.addRender(personZone);
>    }
> }
> {code}     
> If this change was made on ComponentResources, we should probably add the 
> following to support invoking publish events on the client
> {code}
> Link ComponentResources.createPublishLink(String eventType, Object... context)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to