我们使用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属性。