When using onComplete (and others javascript) bindings, the function need to be
defined when the javascript objects is created. If you want to call a function
not already defined, you need to bind to something like "function
(){drawChart();}" to create an indirection.
Samuel
> Le 2015-05-11 à 11:16, Dev WO <[email protected]> a écrit :
>
> You are right, it’s clearly more a regular ajax issue than a WO one, so I was
> already looking towards ajax related comment through a modal dialog.
> Currently, the modal dialog get the correct string representation of the
> javascript function, and also gets updated correctly (like adjusting the date
> range to display the data).
>
> I’m still investigating on the actual drawing of the chart. I’ve put the
> script function inside an ajaxupdatecontainer and try to use the onComplete
> which I though would be called when the content of the ajaxupdatecontainer is
> loaded, but that doesn’t seem to work as I get a javascript error “can’t find
> variable drawChart (the name of the js function)". So I assume somehow it’s
> not fully loaded when the update container think onComplete should be called.
>
> Anyway, this really seems to be a timing issue, I’m investigating this.
>
> Thanks for your help,
>
> I’ll try to update that thread if I can find a “nice” way to make it work.
>
> Xavier
>
>
>> On 11 mai 2015, at 14:59, Samuel Pelletier <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> Xavier,
>>
>> There is maybe some other dependency or expectation about the execution
>> context in the graph library that break it outside the normal page rendering
>> process.
>>
>> You will need to trace or search on how to use this API inside a modal
>> dialog with AJAX contents. There is no real difference between using WO or
>> any other web server technology for these problems.
>>
>> Samuel
>>
>>> Le 2015-05-10 à 10:09, Dev WO <[email protected]
>>> <mailto:[email protected]>> a écrit :
>>>
>>> Hi Samuel,
>>>
>>> I though I did that, but it looks like maybe not:)
>>> I may have been misled as I was actually displaying the graph inline on the
>>> main content (to see if I actually got stuff to display), and also through
>>> the modal dialog. When I removed the call in the main content, it wouldn’t
>>> display in the modal anymore…
>>> So currently I’m generating the javascript inline within the main content,
>>> and basically just call to draw it in the modal dialog. But I don’t like
>>> that because I’m spending time generating the javascript chart directly
>>> inside the main content when it may not get called at all.
>>>
>>> But I think the call to draw isn’t fully working (or maybe not at the right
>>> time). Also I’m fighting with data format, it’s really more painful than I
>>> though to use it.
>>>
>>> I’ll succeed eventually, but I’m not that confident it will be a “right
>>> way” to do it;)
>>>
>>> Thanks for your tips,
>>>
>>>
>>> Xavier
>>>
>>>> On 7 mai 2015, at 17:40, Samuel Pelletier <[email protected]
>>>> <mailto:[email protected]>> wrote:
>>>>
>>>> Xavier,
>>>>
>>>> Your function drawChart is never called. I suppose
>>>> "google.setOnLoadCallback(drawChart);" add some sort of onLoad handler but
>>>> an Ajax request will never trigger it.
>>>>
>>>> A simple way that should work is to put a script after all the required
>>>> HTML elements for the graph with this content:
>>>>
>>>> <script>
>>>> drawChart();
>>>> </script>
>>>>
>>>> There is probably another way with AMD call back but this is tricky since
>>>> the function "drawChart" does not exists when the AMD is created.
>>>>
>>>> Samuel
>>>>
>>>>> Le 2015-05-04 à 11:48, Dev WO <[email protected]
>>>>> <mailto:[email protected]>> a écrit :
>>>>>
>>>>> Hi Samuel,
>>>>>
>>>>> I didn’t mention the console as there was nothing there.
>>>>>
>>>>> Let’s try to give more context:)
>>>>>
>>>>> I’ve got a component which is supposed to be the content of the modal
>>>>> dialog, let’s call it “Chart”
>>>>> This component is
>>>>> <wo:str value = "$googleChartGenerationString" escapeHTML = "$false"/>
>>>>> <div id = "chart_points" style = "width: 1000px; height:
>>>>> 600px;">TEST</div>
>>>>>
>>>>> The $googleChartGenerationString generate something like this for example:
>>>>> <script>
>>>>> google.setOnLoadCallback(drawChart);
>>>>> function drawChart() {
>>>>> var data = new google.visualization.DataTable();
>>>>> data.addColumn('datetime', 'Date');
>>>>> data.addColumn('number', 'Points');
>>>>> data.addRows([
>>>>> [new Date(2015, 4, 3, 23, 44, 48), 1247],
>>>>> [new Date(2015, 4, 3, 23, 47, 43), 1247],
>>>>> [new Date(2015, 4, 4, 0, 24, 43), 1247],
>>>>> [new Date(2015, 4, 4, 4, 34, 55), 1247]]);
>>>>> var options = {
>>>>> curveType: 'none',
>>>>> legend: 'none',
>>>>> width: 900,
>>>>> height: 500
>>>>> };
>>>>> var chart = new
>>>>> google.charts.Line(document.getElementById('chart_points'));
>>>>> chart.draw(data, options);
>>>>> }
>>>>> </script>
>>>>>
>>>>> If I’m placing this component inline in its parent component (which is
>>>>> called via a regular component action, meaning the parent isn’t called
>>>>> from an ajax request), everything is fine, the chart is displayed.
>>>>>
>>>>> If I’m placing the component in the “content” part of an AMD, I can see
>>>>> that it still gets the expected content (using the browser console), but
>>>>> nothing is displayed, even the “TEST” string isn’t removed which is also
>>>>> why I think the javascript isn’t executed at all.
>>>>>
>>>>> So I’m kind of puzzled as to what could prevent my “manual" javascript
>>>>> from being executed when requested inside an AMD.
>>>>>
>>>>> I don’t really have much more context than this:(
>>>>>
>>>>> Xavier
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> On 4 mai 2015, at 16:22, Samuel Pelletier <[email protected]
>>>>>> <mailto:[email protected]>> wrote:
>>>>>>
>>>>>> Xavier,
>>>>>>
>>>>>> Have look at the javascript console, if there is javascript error, it is
>>>>>> probably your problem. If there is nothing there, you should put way
>>>>>> more context to explain what you want to achieve and how you tried so
>>>>>> far.
>>>>>>
>>>>>> Samuel
>>>>>>
>>>>>>
>>>>>>> Le 2015-05-04 à 09:28, Dev WO <[email protected]
>>>>>>> <mailto:[email protected]>> a écrit :
>>>>>>>
>>>>>>> Hi All,
>>>>>>>
>>>>>>> I’m trying to display a chart generated with Google Chart inside an AMD.
>>>>>>>
>>>>>>> For the Google Chart part, I’m generating a javascript function which
>>>>>>> is then “written” into the HTML with a simple wo:string/escape=false
>>>>>>> directly inside the AMD content.
>>>>>>>
>>>>>>> If I display it inline with the page, everything is fine. But if I try
>>>>>>> to display it through an AMD, the javascript isn’t triggered at all.
>>>>>>> It is there, I can see the response (and it works inline for example),
>>>>>>> but it doesn’t display/execute at all.
>>>>>>> I believe it’s not triggered at all because the js update the content
>>>>>>> of a div, and when called through the AMD the “default" content isn’t
>>>>>>> changed.
>>>>>>>
>>>>>>> I’ve tried using the afterLoad and afterResize bindings of the AMD to
>>>>>>> trigger the javascript, but it doesn’t do anything.
>>>>>>>
>>>>>>> Anyone has any pointer on how to get my javascript executed inside the
>>>>>>> AMD?
>>>>>>>
>>>>>>> Thanks a lot,
>>>>>>>
>>>>>>> Xavier
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>>> Webobjects-dev mailing list ([email protected]
>>>>>>> <mailto:[email protected]>)
>>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>> https://lists.apple.com/mailman/options/webobjects-dev/samuel%40samkar.com
>>>>>>>
>>>>>>> <https://lists.apple.com/mailman/options/webobjects-dev/samuel%40samkar.com>
>>>>>>>
>>>>>>> This email sent to [email protected] <mailto:[email protected]>
>>>>
>>>
>>
>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com
This email sent to [email protected]