莫里斯.JS在 xPages 刷新中

Morris.JS in xPages Refresh

本文关键字:刷新 xPages JS 莫里斯      更新时间:2023-09-26

我们使用BootCards。我有一个用于莫里斯.js图的自定义控件。我找到了一种从重复控件中获取所选文档数据的方法。

我的问题是刷新另一个文档的图形。当我将自定义属性"ajaxload"设置为"否"时,页面刷新并显示我的图形。并非重复控件中的所有条目都更改了图形。所选项目跳转到第一个项目。

我可以在哪里放置 morris 的重绘或 setdata 函数.js以便无需刷新即可使用 AJAX 函数。

谢谢!

<script
    src="unp/raphael.min.js"
    type="text/javascript">
</script>
<script
    src="unp/morris.min.js"
    type="text/javascript">
</script>
<xp:scriptBlock id="scriptBlock1">
    <xp:this.value><![CDATA[
    var chartDataCalc = 
        #{javascript:var chartData = [];
        var val = docview1.getItemValueArray(compositeData.barvalue);
        var name = docview1.getItemValueArray(compositeData.barname);
        for (var i=0; i<name.length; i++) {
            chartData.push( {label : name[i], value : val[i]});
        }
        return toJson(chartData)
        };
    var chartBar = 
        Morris.Bar({
        element: #{javascript:compositeData.divid},
        data: '',
        xkey: 'label',
        ykeys: ['value'],
        labels: ['#{javascript:compositeData.barlabel}'],
        resize: true,
        redraw: true
        });
    chartBar.setData(chartDataCalc, 'True');
    ]]>
    </xp:this.value>
</xp:scriptBlock>

如果我理解正确,您正在执行部分刷新以更新重复控件,然后在刷新发生后重新绘制。XPages有两种方法可以做到这一点:

  1. 如果您在部分刷新事件中运行 SSJS/Java 代码,则 view.postScript(") 可用于编写 CSJS,以便在处理完 SSJS 脚本后运行。该参数是一个可以解析为 CSJS 的字符串,例如"alert('Hello World!')"。
  2. 如果在大纲或源代码窗格中选择 eventHandler(后者是我的首选项),您将在"属性"窗格中看到 eventHandler 具有 onComplete 属性,该属性可以运行 CSJS。