你好,欢迎访问我的博客!登录
当前位置:首页 - JavaFX - 正文 求知成瘾,却无作品!

skyline多窗口之间通信(JavaScript方向)

2017-09-29JavaFX攻城狮3951°c
A+ A-

        skyline平台本身没有广播机制,但是我们可以通过一些巧妙的办法,自己实现广播机制,从而完成不同窗口之间的通信问题,在平台API中有这样一个函数:ShowMessageBarText(text,Alignment,Timeout),该函数本来是设计用于在可视化窗口中显示消息通知的,当该方法被执行时会产生一个类似广播的全局通知,我要做的就是在页面中监听接收通知的接口,其中的text可以自定义,从而完成不同页面之间的通信。

也就是说,如果想在不同的页面之间交互数据,可以不用通过服务器,只需要在两个页面里面分别设置监听函数即可,但是有两点需要注意

  1.     1. 广播是全局的,所以不光其他页面可以收到广播,广播发送者自己也可以收到自己发送的广播。

  2.     2. 广播内容只能字符串


示例代码:

//在A页面发送广播信息
sgworld.Window.ShowMessageBarText("reloadpage",0,1);
//在B页面设置监听接口
sgworld.AttachEvent("OnSGWorldMessage",callBackMessage);
//用于处理消息的回调函数,该方法接收两个参数,其中第一个参数就是发送的消息内容
function callBackMessage(MessageID,SourceObjectID){
    alert(MessageID);//此时页面会弹出提示框,内容为reloadPage字符串
}

以上的消息发送的基础代码,在明白了这种机制后,可以自己在这套机制上面做出很多丰富的拓展,例如,将消息体进行参数化自定义,如下所示:

var message="type=tree#json=[{'id' : 1, 'text' : 'test', 'iconCls' : 'icon-save'}]#reload=true";
sgworld.Window.ShowMessageBarText(message,0,1);

然后在回调函数中对该消息进行处理,首先用split(‘#’)切割拿到不同的参数,在对每个结果值用split(‘=’)切割拿到自己最终需要东西。

这些消息在发送接收的时候都是异步的,不会影响页面,现在发送,对方立刻就能收到并进行消息处理。


标签:
推荐阅读

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。


  登录