我正在使用Primefaces 5.3并尝试允许用户通过单击相应的图例项来打开和关闭系列。
因为primefaces 5.3在EnhancedPieLegendRenderer
中不包含jqplot.txt
,所以我在resources / js中手动添加它并将其导入到我的项目中。我的扩展程序的代码位于同一目录中名为charts.js
的文件中。
在我的.xhtml文件中,我引入了这样的文件
<ui:composition template="/templates/template.xhtml">
<ui:define name="body">
<h:outputScript name="js/jqplot.pieRenderer.js"/>
<h:outputScript name="js/extendedPieRenderer.js"/>
<h:outputScript name="js/jqplot.enhancedPieLegendRenderer.js"/>
<h:outputScript name="js/charts.js"/>
饼图本身的xhtml看起来像
<p:chart id="outboundLanChart"
type="pie"
model="#{foo.bar}"/>
底层PieChartModel
对象或支持bean没什么特别的,一切都很好。在用户导航到页面时调用的init方法中,我设置了对象的扩展器bar.setExtender("extnd");
在charts.js中我有
function extnd() {
this.cfg.seriesDefaults = {
renderer: $.jqplot.PieRenderer
}
this.cfg.legend = {
renderer: $.jqplot.EnhancedPieLegendRenderer,
show: true,
rendererOptions: {
seriesToggle: 'normal',
seriesToggleReplot: true
}
}
}
我知道扩展器正在工作,因为我的荧光笔配置完全符合我的预期(我没有包含那段代码,因为它与问题无关)。对console.log
进行this.cfg.legend
检查表明,EnhancedPieLegendRenderer
属性未使用legend.renderer
。到目前为止,搜索谷歌,StackOverflow,primefaces论坛和各种文档和源代码并没有产生任何好结果。 是否有可能获得使用EnhancedPieLegendRenderer的primefaces,或者是否有另一种更合适的Primefaces方式允许用户在饼图上或饼图中切换系列?
更新:在Kukeltje的建议下,我添加了pieRenderer
和extendedPieRenderer
插件并相应地更新了我的js代码。这可能是个问题但不是问题,问题仍然存在。
答案 0 :(得分:1)
通过一些关于'EnhancedPieLegendRenderer'的非常简单的谷歌搜索,我发现'EnhancedLegendRenderer'对于原生jqplot不能正常工作:jqPlot EnhancedLegendRenderer plugin does not toggle series for Pie charts。并且他们创建了您似乎正在使用的EnhancedPieLegendRenderer
,但它需要与extendedPieRenderer
结合使用。由于您似乎没有使用后者,这就是实际问题。
答案 1 :(得分:0)
显然extendedPieRenderer
和enhancedPieLegendRenderer
无法使用5.3正在使用的jqplot Primefaces版本。
抓取最新版本并将我的脚本更改为
<h:outputScript name="js/jqplot.1.0.9/jquery.jqplot.js"/>
<h:outputScript name="js/jqplot.1.0.9/plugins/jqplot.pieRenderer.js"/>
<h:outputScript name="js/jqplot.1.0.9/plugins/jqplot.enhancedPieLegendRenderer.js"/>
解决了这个问题。