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

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

我可以在哪里放置morris.js的redraw或setdata函数,以便可以不刷新就使用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有两种方法可以做到这一点:


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

10-07 19:29
查看更多