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:mailinglist@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.jochimsen@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
>
>
>
|