1

我想在我的 JSP portlet 中显示 jFreeChart 生成的 SVG 图形。图像的大小应该与 portlet 一样宽,高度是宽度的固定因子。

我解决了这个问题,但我想知道是否有更好的方法来完成相同的任务。

我所做的:

  1. 定义一个 invisibel 元素以在渲染后查找 portlet

    <div id="<%= myPortletNamespace %>test" style="display: none;"></div>
    
  2. 定义一个在渲染完成并且设置我的 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 %>();
                }
           });
        }
    );
    

一个问题是触发器似乎触发了 3 次,这可能会成为性能问题。

有更好的方法吗?

4

1 回答 1

0

你可以试试下面的代码:

AUI().use(
    'node',
    function(A) {
        var onResizeFunc = function() {
            // my code.
        }

        A.getWin().on('resize', onResizeFunc);

        onResizeFunc();
    }
);

这具有在用户调整浏览器大小时重新计算的额外好处。可能会破坏这一点的一件事是,如果渲染在文档渲染后的任何时候发生变化。

于 2013-08-16T00:23:07.657 回答