//用于获取<Select>的数据
function fillSelectData(nodes,elem,curValue){
dwr.util.addOptions(elem, nodes, "value","text");
dwr.util.setValue(elem,curValue);
}
function fetchAllSelectData(){
var selects = document.getElementsByTagName("SELECT");
for(var i=0; i<selects.length; i++){
var elem = selects[i];
var datasrc = elem.getAttribute("datasrc");
if(datasrc){
var id = elem.id;
var curValue = elem.getAttribute("curValue");
var fn = new Function("nodes", "fillSelectData(nodes,'" + id + "','" + curValue +"')" );
DWRSelectDataHelper.getData(datasrc,fn);
}
}
}
window.onload = fetchAllSelectData;
这个是在页面加载时用DWR读取数据到SELECT中。
由于要在调用了方法之后传值给回调函数,所以回函数写成了var fn = new Function("nodes", "fillSelectData(nodes,'" + id + "','" + curValue +"')" );
nodes为第一个参数,也是调用的类的返回的参数,id和curValue 是传给回调函数的参数。
这里是我的理解,fn就是一个Function。在new Function的时候,nodes是fn的一个参数,fn的方法体又是另一个方法,即fillSelectData,并把nodes当做fillSelectData的第一个参数传给fillSelectData。DWRSelectDataHelper.getData(datasrc,fn);当执行这句的时候,getData方法返回了一个返回值,然后调用回调函数fn,并把返回值当做fn的参数,即把返回值填充到nodes里面,然后再调用fn里面的fillSelectData方法,并把返回值nodes传过去。
这个网址里有关于new Function的介绍。
http://www.permadi.com/tutorial/jsFunc/index.html
function createMyFunction(myOperator)
{
return new Function("a", "b", "return a" + myOperator + "b;");
}
var add=createMyFunction("+"); // creates "add" function
var subtract=createMyFunction("-"); // creates "subtract" function
var multiply=createMyFunction("*"); // created "multiply" function
// test the functions
alert("result of add="+add(10,2)); // result is 12
alert("result of substract="+subtract(10,2)); // result is 8
alert("result of multiply="+multiply(10,2)); // result is 20
alert(add);