We're doing something like this in event handlers to perform callbacks
void onSetupDialog( @RequestParameter( "params" ) JSONObject json )
{
initialLoad = false;
extractParams( json );
ajaxResponseRenderer.addRender( "linkDialogModal",
( ( org.apache.tapestry5.runtime.Component )
linkDialogModal )
.getComponentResources().getBody() );
if( linkFields ) // link text in the text field to the address field
{
ajaxResponseRenderer.addCallback( new JavaScriptCallback()
{
@Override
public void run( JavaScriptSupport javascriptSupport )
{
javascriptSupport.require(
"components/editor/link-dialog" )
.invoke( "linkFields" ).with(
addressField.getClientId(), linkTextField.getClientId() );
}
} );
}
}
On Mon, Nov 17, 2014 at 10:15 AM, Chris Poulsen <[email protected]>
wrote:
> You are probably asking for trouble if you try to misuse "initializers" in
> this way (which also explains why two identical init statements results in
> only one being executed)
>
> --
> Chris
>
> On Mon, Nov 17, 2014 at 8:45 AM, Charlouze <[email protected]> wrote:
>
>> Geoff,
>>
>> AFAIK, JavascriptSupport is only available at render time and ajax render
>> doesn't start until after your event handler returns something. I think
>> it's because tapestry doesn't know what will need to be rendered yet.
>>
>> For your second question, I think you can achieve what you want if you
>> pass
>> arguments to your invoke :
>>
>> javaScriptSupport.require("components/MyTimer").invoke("
>> showTimer").with(true);
>>
>> It may be a nasty workaround but it works ;)
>>
>> Charles.
>>
>> 2014-11-17 7:48 GMT+01:00 Geoff Callender <
>> [email protected]>:
>>
>> > Chris, It looks like the "rule of thumb" that I stated was wrong. I've
>> > just used JavaScriptSupport#require in some AJAX event handlers.
>> >
>> > Can someone explain under what circumstances we have to use
>> > AjaxResponseRenderer#addCallback instead of JavaScriptSupport#require ?
>> >
>> > Is it something to do with queueing requests? For example I noticed a
>> > limitation of using require. This...
>> >
>> >
>> > javaScriptSupport.require("components/MyTimer").invoke("showTimer");
>> >
>> > javaScriptSupport.require("components/MyTimer").invoke("hideTimer");
>> >
>> > javaScriptSupport.require("components/MyTimer").invoke("showTimer");
>> >
>> > ...resulted in only 2 invocations in the response to the client...
>> >
>> > {
>> > "_tapestry" : {
>> > "inits" : [
>> > "components/MyTimer:showTimer",
>> > "components/MyTimer:hideTimer"
>> > ]
>> > }
>> > }
>> >
>> > Geoff
>> >
>> >
>> > On 14 Nov 2014, at 3:23 pm, Geoff Callender <
>> > [email protected]> wrote:
>> >
>> > > I don't think so. I believe the rule of thumb is to use
>> > JavaScriptSupport during render, and use an AJAX callback during partial
>> > page render.
>> > >
>> > > IIRC, the JavaScriptSupport environmental is not available when you're
>> > handling an AJAX component event request.
>> > >
>> > > On 13 Nov 2014, at 6:08 pm, Chris Poulsen <[email protected]>
>> > wrote:
>> > >
>> > >> can't you just use javascriptsupport to require and invoke your js
>> > module
>> > >> function?
>> > >>
>> > >> --
>> > >> Chris
>> > >>
>> > >> On Thu, Nov 13, 2014 at 6:34 AM, Geoff Callender <
>> > >> [email protected]> wrote:
>> > >>
>> > >>> Have you had a look at these two:
>> > >>>
>> > >>>
>> > >>>
>> >
>> http://jumpstart.doublenegative.com.au/jumpstart7/examples/javascript/modal/1
>> > >>>
>> > >>>
>> >
>> http://jumpstart.doublenegative.com.au/jumpstart7/examples/javascript/reusablemodal/1
>> > >>>
>> > >>> Do they fit your scenario?
>> > >>>
>> > >>> On 13 Nov 2014, at 3:40 pm, Paul Stanton <[email protected]>
>> wrote:
>> > >>>
>> > >>>> Hi Geoff,
>> > >>>>
>> > >>>> I have found your examples invaluable in learning some of the
>> basics
>> > of
>> > >>> this (and other) concepts. I can't thank you enough
>> > >>>>
>> > >>>> .. the only thing I can see is missing currently is the example I
>> > asked
>> > >>> about in the previous mail:
>> > >>>>
>> > >>>> Basically, how do I interact with a js module instance after it is
>> > >>> created?
>> > >>>>
>> > >>>> pretend some server-side state changes between afterRender and
>> > >>> onSomeEvent, and the client needs to react accordingly.
>> > >>>>
>> > >>>> jss.addScript is deprecated, so I "shouldn't" be telling the
>> client to
>> > >>> execute script apparently...
>> > >>>>
>> > >>>> cheers, p.
>> > >>>>
>> > >>>> On 13/11/2014 2:36 PM, Geoff Callender wrote:
>> > >>>>> do these examples cover the situations you are describing?
>> > >>>>
>> > >>>>
>> > >>>>
>> ---------------------------------------------------------------------
>> > >>>> To unsubscribe, e-mail: [email protected]
>> > >>>> For additional commands, e-mail: [email protected]
>> > >>>>
>> > >>>
>> > >>>
>> > >
>> >
>> >
>>
>
>