回调函数的使用场景:
1.js中:点击新增,填写数据,保存后,需要重新刷新父页面的数据(列表)。所以这时回调函数就派上用场了。
一般情况下,整个流程的走向是:A页面上有个点击按钮:点击按钮这个动作将函数名称传递到B(编辑页面中),B(编辑页面)保存后,做一些自己的动作后,获得A页面,通过A页面调用传过来的函数。 这个函数就是回调函数了,一般在这个函数中做刷新A页面数据的动作。
代码:
A页面点击新增:将发送这个请求
var URL = "${pageContext.request.contextPath}/configitem/property/select_property.do?stype=m&dialogFrameId=MethodEdit&callback=propertyBack&slaProcedure="+slaProcedure;
A页面中写好了函数:
function propertyBack(row)
{
var id=new Array();
for(var i=0;i<row.length;i++)
{
id.push(row[i].attributeCode);
}
var ids=id.join(";");
$("#conditionFile").val(ids);
}
B页面中通过${param.callback}获得函数名称,并且执行:当然前提是要获取到A页面的对象: var api = frameElement.api, W = api.opener; //父window对象
function colseWin(row){
if("${not empty param.dialogFrameId}"=="true")
{
//回调函数
if("${not empty param.callback}"=="true"){
if("${not empty param.dialogFrameId}"=="true"){
eval("api.get('${param.dialogFrameId}').${param.callback}(row)");
}else{
eval("W.${param.callback}(row)");
}
}
api.get("${param.dialogFrameId}").Common.setTopDialog();
frameElement.api.close();
}
}
JAVA实现回调需要2个类,1个接口;这个接口中声明一个函数(这个函数就是回调函数了)
A类实现接口,并重写函数。然后把A类创建的对象传递到B类对象中。B类中的方法(先做自己的方法,在通过然后通过接口调用A类实现的方法)
直接上代码:
public interface CallBack {
void excut();
}
public class A implements CallBack{
@Override
public void excut() {
System.out.print("我是回调函数");
}
public static void main(String str[])
{
B b=new B(new A());
b.doSome();
}
}
public class B {
/**
* @author cwy
* @date 2017-1-6 下午8:31:18
* @version 版本号码
* @TODO 描述
*/
private CallBack callBack;
public B(CallBack callBack){
this.callBack=callBack;
};
public void doSome()
{
System.out.println("我做我的事情先");
callBack.excut(); //执行传进来的对象的函数
}
}
一个简单的回调就好了