You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Paul Stanton <pa...@mapshed.com.au> on 2010/05/18 09:27:13 UTC

Ajax.Request to handle a multizone update?

Hi all,

I've set up an Ajax.Request to call a listener method in my component.

The listener method returns a MultiZoneUpdate.

return new MultiZoneUpdate("myZone", myZone); // this will update more 
zones once I get it working

My question is, what do I have to do in my onComplete (or onSucess) 
handler in the Ajax.Request to actually perform the zone updates on the 
client?

Or is there a better method of calling and handling an event listener 
which returns a MultiZoneUpdate than Ajax.Request?

Thanks, p.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Ajax.Request to handle a multizone update?

Posted by Paul Stanton <pa...@mapshed.com.au>.
Howard, where can I find it in 5.2? (js method name)

I'd like to write some forwards compatibility so i don't forget when we 
upgrade...

Howard Lewis Ship wrote:
>
> > I've extracted the body of 'Tapestry.loadScriptsInReply' and called that
> > with the parameter 'transport.responseJSON'.
> >
> > This works well, however it would be good to not have to copy and paste code
> > the tapestry.
> >
> > I will log a jira requesting the body of Tapestry.loadScriptsInReply be
> > exposed as its own top level function for adequate re-use.

> You're a little late on that, it's already in 5.2 (for other reasons).
>
>   

Re: Ajax.Request to handle a multizone update?

Posted by Howard Lewis Ship <hl...@gmail.com>.
2010/5/18 Paul Stanton <pa...@mapshed.com.au>:
> Thanks Vassilis,
>
> The key was in the javascript function processReply
>
>   processReply : function(reply)
>   {
>       Tapestry.loadScriptsInReply(reply, function()
>       {
>           // In a multi-zone update, the reply.content may be blank or
> missing.
>
>           reply.content && this.show(reply.content);
>
>           // zones is an object of zone ids and zone content that will be
> present
>           // in a multi-zone update response.
>
>           Object.keys(reply.zones).each(function (zoneId)
>           {
>               var manager = Tapestry.findZoneManagerForZone(zoneId);
>
>               if (manager)
>               {
>                   var zoneContent = reply.zones[zoneId];
>                   manager.show(zoneContent);
>               }
>           });
>       }.bind(this));
>   },
>
>
> I've extracted the body of 'Tapestry.loadScriptsInReply' and called that
> with the parameter 'transport.responseJSON'.
>
> This works well, however it would be good to not have to copy and paste code
> the tapestry.
>
> I will log a jira requesting the body of Tapestry.loadScriptsInReply be
> exposed as its own top level function for adequate re-use.

You're a little late on that, it's already in 5.2 (for other reasons).

>
> Indeed, it would be handy to have a top level function that could detect and
> handle any type of tapestry ajax response.
>
> p.
>
> Vassilis Bekiaris wrote:
>>
>> Hi,
>>
>> in a page I would do the following (not really sure if you may apply this
>> in a component, however I see no reason why you shouldn't be able to do
>> this):
>>
>> 1. Include an eventlink (even if you don't want the ajax update to be
>> invoked by means of clicking the link, include it and hide it with
>> display:none)
>>
>> <t:eventlink t:id="ajaxUpdate" id="ajaxUpdate" zone="ajaxZone1"
>> style="display:none"></t:eventlink>
>> <t:zone t:id="ajaxZone1" id="ajaxZone1">...</t:zone>
>> <t:zone t:id="ajaxZone2" id="ajaxZone2">...</t:zone>
>>
>> 2. If you want to invoke this through javascript use the following
>> javascript statement:
>>
>> $T('ajaxZone1').zoneManager.updateFromURL($('ajaxUpdate').href);
>>
>> I obtain tapestry's zone manager for the zone and invoke updateFromURL
>> using the url formatted by tapestry in the event link.
>>
>> 3. (obviously :)) handle the event in your code just like you do,
>> returning a multi zone update object.
>>
>> Tapestry's js handles the zone updates once the ajax response is received
>> on the client side. This has been working fine for me, you may want to have
>> a look in tapestry.js - the implementation of updateFromURL will show you
>> the next steps tapestry is going through to update the zones on the
>> client-side.
>>
>> Cheers,
>> Vassilis
>>
>>
>> On 18/05/10 10:27, Paul Stanton wrote:
>>>
>>> Hi all,
>>>
>>> I've set up an Ajax.Request to call a listener method in my component.
>>>
>>> The listener method returns a MultiZoneUpdate.
>>>
>>> return new MultiZoneUpdate("myZone", myZone); // this will update more
>>> zones once I get it working
>>>
>>> My question is, what do I have to do in my onComplete (or onSucess)
>>> handler in the Ajax.Request to actually perform the zone updates on the
>>> client?
>>>
>>> Or is there a better method of calling and handling an event listener
>>> which returns a MultiZoneUpdate than Ajax.Request?
>>>
>>> Thanks, p.
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>>> For additional commands, e-mail: users-help@tapestry.apache.org
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>



-- 
Howard M. Lewis Ship

Creator of Apache Tapestry

The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!

(971) 678-5210
http://howardlewisship.com

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Ajax.Request to handle a multizone update?

Posted by Paul Stanton <pa...@mapshed.com.au>.
Thanks Vassilis,

The key was in the javascript function processReply

    processReply : function(reply)
    {
        Tapestry.loadScriptsInReply(reply, function()
        {
            // In a multi-zone update, the reply.content may be blank or missing.

            reply.content && this.show(reply.content);

            // zones is an object of zone ids and zone content that will be present
            // in a multi-zone update response.

            Object.keys(reply.zones).each(function (zoneId)
            {
                var manager = Tapestry.findZoneManagerForZone(zoneId);

                if (manager)
                {
                    var zoneContent = reply.zones[zoneId];
                    manager.show(zoneContent);
                }
            });
        }.bind(this));
    },


I've extracted the body of 'Tapestry.loadScriptsInReply' and called that 
with the parameter 'transport.responseJSON'.

This works well, however it would be good to not have to copy and paste 
code the tapestry.

I will log a jira requesting the body of Tapestry.loadScriptsInReply be 
exposed as its own top level function for adequate re-use.

Indeed, it would be handy to have a top level function that could detect 
and handle any type of tapestry ajax response.

p.

Vassilis Bekiaris wrote:
> Hi,
>
> in a page I would do the following (not really sure if you may apply 
> this in a component, however I see no reason why you shouldn't be able 
> to do this):
>
> 1. Include an eventlink (even if you don't want the ajax update to be 
> invoked by means of clicking the link, include it and hide it with 
> display:none)
>
> <t:eventlink t:id="ajaxUpdate" id="ajaxUpdate" zone="ajaxZone1" 
> style="display:none"></t:eventlink>
> <t:zone t:id="ajaxZone1" id="ajaxZone1">...</t:zone>
> <t:zone t:id="ajaxZone2" id="ajaxZone2">...</t:zone>
>
> 2. If you want to invoke this through javascript use the following 
> javascript statement:
>
> $T('ajaxZone1').zoneManager.updateFromURL($('ajaxUpdate').href);
>
> I obtain tapestry's zone manager for the zone and invoke updateFromURL 
> using the url formatted by tapestry in the event link.
>
> 3. (obviously :)) handle the event in your code just like you do, 
> returning a multi zone update object.
>
> Tapestry's js handles the zone updates once the ajax response is 
> received on the client side. This has been working fine for me, you 
> may want to have a look in tapestry.js - the implementation of 
> updateFromURL will show you the next steps tapestry is going through 
> to update the zones on the client-side.
>
> Cheers,
> Vassilis
>
>
> On 18/05/10 10:27, Paul Stanton wrote:
>> Hi all,
>>
>> I've set up an Ajax.Request to call a listener method in my component.
>>
>> The listener method returns a MultiZoneUpdate.
>>
>> return new MultiZoneUpdate("myZone", myZone); // this will update 
>> more zones once I get it working
>>
>> My question is, what do I have to do in my onComplete (or onSucess) 
>> handler in the Ajax.Request to actually perform the zone updates on 
>> the client?
>>
>> Or is there a better method of calling and handling an event listener 
>> which returns a MultiZoneUpdate than Ajax.Request?
>>
>> Thanks, p.
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Ajax.Request to handle a multizone update?

Posted by Vassilis Bekiaris <v....@saicon.gr>.
Hi,

in a page I would do the following (not really sure if you may apply 
this in a component, however I see no reason why you shouldn't be able 
to do this):

1. Include an eventlink (even if you don't want the ajax update to be 
invoked by means of clicking the link, include it and hide it with 
display:none)

<t:eventlink t:id="ajaxUpdate" id="ajaxUpdate" zone="ajaxZone1" 
style="display:none"></t:eventlink>
<t:zone t:id="ajaxZone1" id="ajaxZone1">...</t:zone>
<t:zone t:id="ajaxZone2" id="ajaxZone2">...</t:zone>

2. If you want to invoke this through javascript use the following 
javascript statement:

$T('ajaxZone1').zoneManager.updateFromURL($('ajaxUpdate').href);

I obtain tapestry's zone manager for the zone and invoke updateFromURL 
using the url formatted by tapestry in the event link.

3. (obviously :)) handle the event in your code just like you do, 
returning a multi zone update object.

Tapestry's js handles the zone updates once the ajax response is 
received on the client side. This has been working fine for me, you may 
want to have a look in tapestry.js - the implementation of updateFromURL 
will show you the next steps tapestry is going through to update the 
zones on the client-side.

Cheers,
Vassilis


On 18/05/10 10:27, Paul Stanton wrote:
> Hi all,
>
> I've set up an Ajax.Request to call a listener method in my component.
>
> The listener method returns a MultiZoneUpdate.
>
> return new MultiZoneUpdate("myZone", myZone); // this will update more 
> zones once I get it working
>
> My question is, what do I have to do in my onComplete (or onSucess) 
> handler in the Ajax.Request to actually perform the zone updates on 
> the client?
>
> Or is there a better method of calling and handling an event listener 
> which returns a MultiZoneUpdate than Ajax.Request?
>
> Thanks, p.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org