DWR调用时由主调函数内传值到回调函数内

//用于获取<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);

你可能感兴趣的:(html,DWR)