[ https://issues.apache.org/jira/browse/TAP5-2383?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14121188#comment-14121188 ]
Lance edited comment on TAP5-2383 at 9/4/14 9:59 AM: ----------------------------------------------------- Dmitry's questions: {quote}You can have {{<t:eventLink t:id="myEvent">}}... that will trigger the same event handler. Now, how this event will be handled, using bubbling or publishing{quote} As I said, I'm suggesting these events are a new type of event. So eventlink will never fire @Subscribe events Note that publish event handlers will never return anything and will always be void. So using existing event handlers is a bad fit (you can always have one call the other if you wish). {quote}it doesn't feel right to have publish method on ComponentResources, because it only knows about parent/child component relations of specific page relative to current component.{quote} I disagree. ComponentResources has a pointer to the containing page. I feel that the page will distribute the event to all of it's children. Regardless of the current component's place in the hierarchy. was (Author: uklance): Dmitry's questions: {quote}You can have {{<t:eventLink t:id="myEvent">}}... that will trigger the same event handler. Now, how this event will be handled, using bubbling or publishing{quote} As I said, I'm suggesting these events are a new type of event. So eventlink will never fire @Subscribe events Note that publish event handlers will never return anything and will always be void. {quote}it doesn't feel right to have publish method on ComponentResources, because it only knows about parent/child component relations of specific page relative to current component.{quote} I disagree. ComponentResources has a pointer to the containing page. I feel that the page will distribute the event to all of it's children. Regardless of the current component's place in the hierarchy. > 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)