Jeffrey D. Brekke wrote:

On Fri, 28 May 2004 14:09:59 +0200, Bernardo Arlandis Ma�� <[EMAIL PROTECTED]> 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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to