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

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

{quote}Also why do we need the ComponentResources.createPublishLink? How is the 
publish event will be different from existing event types?{quote}
Normal component events first fire on the component that defined them. Normal 
events then bubble up the hierarchy (unless true is returned which terminates 
the bubbling). It's impossible for a normal component event to bubble to it's 
sibling.

What I am proposing is a new class/type of event. This event is published to 
all components on the page, regardless of hierarchy, with no way of terminating 
the publish. This new publish event allows sibling components to fire each 
other.


was (Author: uklance):
{quote}Also why do we need the ComponentResources.createPublishLink? How is the 
publish event will be different from existing event types?{quote}
Normal component events first fire on the component that defined them. Normal 
events then bubble up the hierarchy (unless true is returned which terminates 
the bubbling). It's impossible for a normal component event to bubble to it's 
sibling.

What I am proposing is a new class/type of event. This event is published to 
all components on the page, regardless of hierarchy, with no way of terminating 
the publish. This new publish event allows siblings to fire each other.

> 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;
>    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