skyline多窗口之间通信(JavaScript方向)
2017-09-29JavaFX攻城狮3627°c
A+ A-skyline平台本身没有广播机制,但是我们可以通过一些巧妙的办法,自己实现广播机制,从而完成不同窗口之间的通信问题,在平台API中有这样一个函数:ShowMessageBarText(text,Alignment,Timeout),该函数本来是设计用于在可视化窗口中显示消息通知的,当该方法被执行时会产生一个类似广播的全局通知,我要做的就是在页面中监听接收通知的接口,其中的text可以自定义,从而完成不同页面之间的通信。
也就是说,如果想在不同的页面之间交互数据,可以不用通过服务器,只需要在两个页面里面分别设置监听函数即可,但是有两点需要注意:
1. 广播是全局的,所以不光其他页面可以收到广播,广播发送者自己也可以收到自己发送的广播。
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(‘=’)切割拿到自己最终需要东西。
这些消息在发送接收的时候都是异步的,不会影响页面,现在发送,对方立刻就能收到并进行消息处理。
标签:skyline