JavaScriptComponent的setState和callFunction方法都没有返回值。那怎么才能调用一个预设的JS函数并获得到他的返回值呢?
vaadin14有个PendingJavaScriptResult可以获得返回值,那CUBA里面是VAADIN8,是不是凉了,没法同步获得返回值了。
我这个方法不知道正统不正统,我这样做过:
Java connector写个方法比如叫 TellConnector(value).
然后调用JS某个需要返回值的方法的时候,在这个方法里调用 connector的 TellConnector(value)方法。
我也想坐等一个正确的解法
你的意思是用回调是吗?
@AnJingjing 说地没错 ,服务端与客户端的交互都是异步的,callFunction 后肯定不能马上拿到值 。
在 Vaadin8 中的做法是通过客户端 connector 调用注册的回调函数,下面是在服务端注册回调函数:
idCardReader.addFunction("showIdCardInfo",callbackEvent->{
boolean succ = callbackEvent.getArguments().getBoolean(0);
String data = callbackEvent.getArguments().getString(1);
if(!succ){
notifications.create(Notifications.NotificationType.ERROR).withCaption("读取身份证信息失败").show();
}
});
下面是在客户端调用注册的回调函数:
com_skd_labour_web_screen_projectworker=function(){
var connector = this;
connector.readIdCardInfo=function(){
var url="http://127.0.0.1:24010/ZKIDROnline/ScanReadIdCardInfo?OP-DEV=1&CMD-URL=4";
data=$.ajax(
{
url:url,
async:true,
success:function (data,status) {
try{
data=data.replace(/\\/g,"\\\\");
connector.showIdCardInfo(true,data);
}catch (e) {
connector.showIdCardInfo(false,"解析错误");
}
},
error:function (xmlReq,err,ex) {
connector.showIdCardInfo(false,err);
}
}
);
}
}
在服务端调用客户端函数:
idCardReader.callFunction("readIdCardInfo");
以上代码中 idCardReader
是一个 JavaScriptComponent
没办法,这样想同步获得结果,只能自己去写线程等待。话说CUBA准备升级vaading吗?还是准备换UI框架