You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@turbine.apache.org by Bernardo Arlandis Mañó <be...@ya.com> on 2004/06/02 11:12:51 UTC
Re: Generating javascript code with velocity
Jeffrey D. Brekke wrote:
>>>>>>On Fri, 28 May 2004 14:09:59 +0200, Bernardo Arlandis Mañó <be...@ya.com> said:
>>>>>>
>>>>>>
>
>[SNIPPED]
>
>
>
>>You've pointed something important, if the js code has to be
>>regenerated there's no improvement other than having separate
>>files. The js code should be static, but then I'd need to pass
>>dinamically created collections of objects to the javascript
>>functions to do their work. What I'd like to know is easy ways to do
>>this or alternative ones with the same effect. For example, I need
>>to pass a list of java objects generated by velocity to the
>>javascript functions so that the js functions can work with them
>>without having to use velocity to replicate the js code.
>>
>>
>
>We've done this. We put our javascript code into .js files as
>suggested. This is static js code, functions really. Then in our
>velocity templates we use the js functions. We really try to keep
>these javascript functions to ui issues ( speed ) and very little
>logic in them ( for example disabling or enabling a button on the fly
>).
>
>So in one instance we had to take a list of objects we get from our
>pull tool and slam that into a js array for our javascript functions
>to use. In our velocity template we did just that:
>
>--- CommonJS.vm---
>
><script language="JavaScript" src="$content.getURI("javascript/selectbox.js")"></script>
><script language="JavaScript" src="$content.getURI("javascript/format-utility.js")"></script>
>
>#set($jsfields = $layoutholder.Layout.Fields)
>#if ($jsfields)
>
><script language="JavaScript">
>
>var noFields = $jsfields.size();
>var fields = new Array(noFields);
>
>#set($offset = 1)
>#foreach($field in $jsfields)
> #set ($i = $velocityCount - 1)
> #set ($end = $offset + $field.FieldLength - 1 )
> fields[$i] = new Array(6);
> fields[$i][0] = "$formatutil.escapeJavaScript($!field.CustomerField)";
> fields[$i][1] = "$!field.QdsField";
> fields[$i][2] = "$!field.FieldLength";
> fields[$i][3] = "$offset";
> fields[$i][4] = "$end";
> fields[$i][5] = "$!field.FieldType";
> fields[$i][6] = "$!field.FieldFormat";
> #set ($offset = $end+1);
>#end
></script>
>#end
>
>Then we use our javascript function on our html elements, passing the array as needed.
>
><select name="fmt" size="10" onChange="update(this, fields)" onkeypress="keyUpdate(this,event)">
>
>Hope this helps.
>
>
>
I was going to do something like that but I was looking for a more
general solution that could work the same for any object without much
coding. As it seems there's no such method, I'll take yours with your
code as a working example. Thanks.
Regards.
--
Bernardo Arlandis Mañó
* http://berarma.webhop.org/
* http://mozilla.webhop.org/
---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-user-help@jakarta.apache.org