Very cute. It's something akin to GWT's event buses, but server-side.

A less cute alternative, but one which and has served my needs to date and is 
straight-forward, is to have the container call a method on each interested 
component. You can see it in the following example. Page Persons has several 
event handlers that call list.doChangeOfSelectedPerson().

        
http://jumpstart.doublenegative.com.au/jumpstart7/together/ajaxcomponentscrud/persons

Some extra benefits are that it doesn't need @Persist, and each piece has the 
opportunity to set up or pass parameters.

Cheers,

Geoff

On 20 Jun 2014, at 2:50 pm, Paul Stanton <pa...@mapshed.com.au> wrote:

> This seems to work, but i'm not sure i trust it!
> 
> anyone have a better idea? It would be great to be able to subscribe to an 
> event thrown by the container...
> 
> MyPage {
>    @Persist
>    Private List<Runnable> listeners;
> 
>    void setupRender()    {
>        listeners = new ArrayList<>();
>    }
> 
>    public void addListener(Runnable r)    {
>        listeners.add(r);
>    }
> 
>    void onSomeEvent()    {
>        doSomeProcessing();
>        for (Runnable l : listeners)
>            l.run();
>    }
> }
> 
> MyEmbeddedComponent {
>    @Inject
>    private ComponentResources resources;
> 
>    void setupRender()    {
>        ((MyPage) resources.getPage()).addListener(new Runnable()     {
>            public void run()            {
>                listenerMethod();
>            }
>        });
>    }
> 
>    void listenerMethod()    {
>        doSomething();
>    }
> }
> 
> On 23/03/2013 3:36 AM, Howard Lewis Ship wrote:
>> ive tought this woud be a cool feature, but it does not exist yet.
>> 
>> On Thursday, March 21, 2013, Paul Stanton wrote:
>> 
>>> Hi all,
>>> 
>>> Is there a way to trigger an event in a container (Page) which notifies
>>> embedded components?
>>> 
>>> I'm hoping to do something like this (pseudo code) :
>>> 
>>> Page
>>> {
>>>     void onSomeEvent()
>>>     {
>>>         notifyListeners("**SomethingHappened");
>>>     }
>>> }
>>> 
>>> EmbeddedComponent
>>> {
>>>     void setupRender()
>>>     {
>>>         page.listenTo("**SomethingHappened");
>>>     }
>>> 
>>>     void onSomethingHappened()
>>>     {
>>>         // called when triggered by page
>>>     }
>>> }
>>> 
>>> Help appreciated, thanks, paul.
>>> 
>>> ------------------------------**------------------------------**---------
>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>> 
>>> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
> 

Reply via email to