Hi, Utils and ajax are injected using requirejs, the top of the module file looks like this...
(function(){ define(["jquery", "t5/core/ajax", "t5/core/utils", "components/editor/inline-toolbar" ], function ($, ajax, utils, toolbar) { On Thu, Jul 21, 2016 at 10:42 PM, Jochimsen, Janko < janko.jochim...@urios-beratung.de> wrote: > Hi Chris, > > thanks for your sift answer > > I think this is the right direction. I am just stuck with a very – > probably stupid – problem. I included all relevant paths that I can think > of with: > > define([ "jquery", "t5/core/dom", "t5/core/ajax", "t5/core/utils" ] > > the function looks like this: > var buildUrl = function(link, params) { > return utils.extendURL(link, { > params : JSON.stringify(params) > }); > }; > > > Where the calling is: > var url = buildUrl(callback, { > 'action' : 'follow', > 'userid' : '11239528343' > }); > > > but in Firefox console I get still > > TypeError: extendURL is not a function > buildUrl() > myBarRender.js:56 > <anonym> > myBarRender.js:30 > jQuery.event.dispatch() > jquery.js:137 > jQuery.event.add/elemData.handle() > jquery.js:126 > jQuery.event.trigger() > > Any Idea? > > Thanks a lot > > Janko > > > -----Ursprüngliche Nachricht----- > Von: Chris Poulsen [mailto:mailingl...@nesluop.dk] > Gesendet: Donnerstag, 21. Juli 2016 19:20 > An: Tapestry users <users@tapestry.apache.org> > Betreff: Re: Problem sending data from a JS Element back to Tapestry > > you cannot expect that your parameters end up as event context (unless you > encode them into your url in that way). > > I've had success using: > > var url = buildUrl( setupDialogLink, params ); ajax( url, { > success: function(){ ... } > }); > > var buildUrl = function( link, params ) > { > return utils.extendURL( link, { params: JSON.stringify(params) } ); }; > > Where ajax/utils are those from t5/core/ajax / t5/core/utils > > The handler on the server side looks like this: > > handlerName( @RequestParameter( "params" ) JSONObject json ) > > HTH. > > -- > Chris > > > > > > On Thu, Jul 21, 2016 at 5:35 PM, Jochimsen, Janko < > janko.jochim...@urios-beratung.de> wrote: > > > Hello Everybody, > > I do have a problem with the communication between tapestry and java > > Script or to be more precise a JQuery Script. > > As a background Information I am using JQPlot Graphs that work quiet good > > and I can start them from tapestry without problems. > > Now I would like to increase the interaction of these elements by sending > > mouse clicks back to the tapestry system for further use. > > In order to call the plot I use > > > > public void afterRender() { > > Link link = resources.createEventLink("Call2", spec); > > String uri = link.toAbsoluteURI(); > > String output = "Call JS with Parameter:[" + uri + "]"; > > logger.info(" OUTPUT: " + output); > > javaScriptSupport.require("myBarRender").with(uri, spec); > > > > } > > > > Where Call2 looks like this: > > public void onCall2(EventContext eventContext) { > > if (eventContext != null) { > > > > JSONObject value = null; > > > > StringBuffer sb = new StringBuffer(); > > CaptureResultCallback<String> callback = new > > CaptureResultCallback<String>(); > > resources.triggerEvent(EventConstants.REFRESH, new > > JSONObject[] { value }, callback); > > > > if (callback.getResult() != null) { > > Object obj = callback.getResult(); > > sb.append(" CALLBACK = " + obj.toString() + > ".."); > > } else { > > sb.append(" CALLBACK = NULL "); > > } > > String[] data = eventContext.toStrings(); > > > > if (data.length > 0) { > > for (int i = 0; i < data.length; i++) { > > sb.append("data[" + i + "] =" + data); > > String s = data[i]; > > if (s != null) { > > sb.append("content=" + s); > > } > > } > > } else { > > sb.append("NO DATA"); > > } > > logger.info("Got Called from JS with data " + > > sb.toString()); > > } else { > > logger.info("Got Called from JS with data == null"); > > } > > } > > > > On the JavaScript-Side the code looks like this > > > > define([ "jquery" ], function($) { > > > > return function(callbackuri, context) { > > var s1 = [ 2, 6, 7, 10 ]; > > var s2 = [ 7, 5, 3, 2 ]; > > var s3 = [ 14, 9, 3, 8 ]; > > var callback = callbackuri; > > > > plot3 = $.jqplot('chart3', [ s1, s2, s3 ], { > > stackSeries : true, > > captureRightClick : true, > > seriesDefaults : { > > renderer : $.jqplot.BarRenderer, > > rendererOptions : { > > highlightMouseDown : true > > }, > > pointLabels : { > > show : true > > } > > } > > }); > > $('#chart3').bind( > > 'jqplotDataRightClick', > > function(ev, seriesIndex, pointIndex, data) { > > console.log("try to reach callback"); > > // > > $.ajax(callback, { > > dataType : 'json', > > type : 'post', > > contentType : 'application/json', > > data : JSON.stringify({ > > 'action' : 'follow', > > 'userid' : '11239528343' > > }), > > success : function(data) { > > console.log("Reached Server got > > back "); > > } > > // $.post(callback, $(this).serialize(), > > // function(data, textStatus, jQxhr) { > > // console.log("Reached Server got back > "); > > // $('#response pre').html(data); > > // > > // }, 'text').fail( > > // function(jqXhr, textStatus, errorThrown) { > > // console.log(errorThrown); > > // }); > > // > > // ev.preventDefault(); > > > > }); > > // Ende ajax > > }); > > // Ende Bind > > } > > // Ende Main function > > }) > > > > Result: Graph shows up. If I do a right click with the mouse the ajax > > command will be executed. The console in the Tapestry will show that the > > call has been received. The Firefox Console also gives the right > feedback. > > BUT.. the EventContext will be a EmptyEventContext Object and therefor > all > > data tests that I do will fail. As you can see I also tried a simple > $.post > > variation. Also no results. > > > > Anybody any idea? > > > > Thanks in advance > > > > Janko > > > > > > >