receiveMessage()- JSP组件如何支持联动-DBD组件联动机制
目录

receiveMessage()

在被联动组件中,开发者可以使用以下固定写法,来接收参数并进行处理:

window.on_dbd_init = function() { //此为固定写法,receiveMessage()必须在window.on_dbd_init内部调用
    //调用receiveMessage()接收消息
    window.DBDBusUtils.receiveMessage("setText", notifyHandler);
}
function notifyHandler(msg){
    var data = msg.data; //获取参数
    ... ...//开发者在这里添加对接受到的参数进行处理以及后续操作的代码
}

在上面代码中,window.DBDBusUtils.receiveMessage("setText", notifyHandler)方法的第一个参数表示消息类型,固定使用默认值"setText" 。

第二个参数实际是一个回调函数,为function类型,通过实现这个回调函数,在该函数中对接收到的参数进行处理。

因此,开发者也可以参照上面代码,在调用receiveMessage()方法时传入自行实现的回调函数名,例如下面代码所示:

window.on_dbd_init = function() { 
    window.DBDBusUtils.receiveMessage("setText", myParamsHandler); //传入回调函数名myParamsHandler
}
function myParamsHandler(msg){ //实现回调函数myParamsHandler,对接收到的参数进行处理
    var data = msg.data; //获取参数
    ... ... //对参数进行处理
}

另外,也可以调用receiveMessage()方法时直接实现一个匿名函数进行参数处理,例如下面代码所示:

window.on_dbd_init = function() {
    window.DBDBusUtils.receiveMessage("setText", function(msg){ //实现一个匿名函数
        var data = msg.data; //获取参数
        ... ... //对参数进行处理
    });
}

下面是一个被联动的jsp组件示例代码:

<html>
    <head>
    </head>
    <script language="javascript">
        //实现getReportParams()方法,返回被联动组件接收的参数
        function getReportParams(){
            return '[{name:"r_year",value:""},{name:"r_month",value:""}]';
        }
        //接收消息
        window.on_dbd_init = function() {
            //调用receiveMessage()接收消息
            window.DBDBusUtils.receiveMessage("setText", notifyHandler);
        }
        function notifyHandler(msg){
            var data = msg.data; //获取参数
            //遍历数据,显示在页面文本框中
            for(var index in data){
                var paramItem=data[index];
                var textValue=$("#receive_msg").val();
                textValue+="\n";
                textValue+=paramItem.name+"="+paramItem.value;
                $("#receive_msg").val(textValue);
                $("#receive_msg").text(textValue);
            }
        }
    </script>
    <body>
        <textarea id="receive_msg" style="width:100%;height:300px">显示接收到的联动消息:</textarea>
    </body>
</html>