我想在我的JSP portlet中显示jFreeChart生成的SVG图形。图像的大小应该与portlet一样宽,高度应该是宽度的固定因子。
我解决了这个问题,但我想知道是否有更好的方法来完成同样的任务。
我的所作所为:
定义一个invisibel元素,以便在渲染后找到portlet
<div id="<%= myPortletNamespace %>test" style="display: none;"></div>
定义一个触发器,该触发器在渲染完成并且设置了我的portlet的宽度时触发。在这里,我找到上面提到的元素,检查它的大小,调整包含图形的表的大小,并进行资源调用以获取图形。
Liferay.on('allPortletsReady',
function() {
AUI().use('node', function(A) {
var test = A.one('#<%= myPortletNamespace %>test');
var parent = test.ancestor('.portlet-body');;
if (parent != null){
var table_width = parent.get('offsetWidth');;
<%= myResize %>(table_width);
<%= myGetTableCharts %>();
}
});
}
);
一个问题是触发器似乎触发了三次,这可能会成为性能问题。
有更好的方法吗?
答案 0 :(得分:0)
您可以尝试以下代码:
AUI().use(
'node',
function(A) {
var onResizeFunc = function() {
// my code.
}
A.getWin().on('resize', onResizeFunc);
onResizeFunc();
}
);
当用户调整浏览器大小时,这还有一个重新计算的好处。有可能打败这一点的一件事是,如果渲染文档在渲染后的任何时候渲染都会发生变化。