好久不用callBack了,因为效率问题,不过,最近接到个任务需要改原来的postBack代码为页面无闪烁,想了一下觉得还是用callBack代码修改量要少些,但是,,callBack前端的用法很囧也,很麻烦,比如用服务器端代码指定什么参数啦,回调后执行的js函数啦,搅来搅去的,于是对callBack进行了改造,目的是使callBack用起来更加方便。
——————————————————————
1. net端添加的一个方法(vb.net):
Public Sub RegisterPageCallBackScripts(Optional ByVal callBackFunctionName As String = "callServer")
Dim sbd As New StringBuilder()
Dim sendDataArgument As String = "callStr"
Dim receiveDataFunctionName As String = "rtnFunc"
Dim context As String = "context"
sbd.AppendLine("var " & callBackFunctionName & "=function( " & sendDataArgument & "," & receiveDataFunctionName & "," & context & "){")
sbd.AppendLine(" " & Page.ClientScript.GetCallbackEventReference(Me, sendDataArgument, receiveDataFunctionName, context))
sbd.AppendLine("}")
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "", sbd.ToString, True)
End Sub
2. 如何使用?
1). 先在.net端的页面page.onload事件里面调用此方法:
RegisterPageCallBackScripts() //注意可传函数名进去,默认是"callServer";
2). js端调用回调函数
$("btn_test").onclick = function(){
//页面回调,第1参数是传回服务器的参数,第2个参数是回调结束执行的函数,实名匿名皆可
callServer($("txt1").value, function(receivedStr){alert( receivedStr )});
}
——————————————————————————————
完毕。
例子中的$函数等于getElementById(),这样处理之后,前端只要想回调就调用 callServer函数,很符合程序员的习惯,原来的receiveFromServer之类的函数也可以忽略了(匿名函数的使用也使得代码看起来简单不少),后端注册基本不用填参数,不用去管argument啊、receiveFromServer函数名称啊之类的前端名称,是不是简单不少了呢,:)