请问在使用JavaScriptComponent时如何获得JS函数的返回值

JavaScriptComponent的setState和callFunction方法都没有返回值。那怎么才能调用一个预设的JS函数并获得到他的返回值呢?

vaadin14有个PendingJavaScriptResult可以获得返回值,那CUBA里面是VAADIN8,是不是凉了,没法同步获得返回值了。

我这个方法不知道正统不正统,我这样做过:

Java connector写个方法比如叫 TellConnector(value).

然后调用JS某个需要返回值的方法的时候,在这个方法里调用 connector的 TellConnector(value)方法。

我也想坐等一个正确的解法 :smiley:

你的意思是用回调是吗?

@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框架