Hey, hang on, Chris, weren't you the one who asked "can't you just use javascriptsupport to require and invoke your js module function?". That's what got me doubting the "rule of thumb" that I'd written! Am I missing your point?
Cheers Geoff On 17 Nov 2014, at 8:56 pm, Chris Poulsen <[email protected]> wrote: > 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] >>>>>>>> >>>>>>> >>>>>>> >>>>> >>>> >>>> >>> >> >> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
