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