【问题标题】:Components inside a repeater not resizing as expected中继器内的组件未按预期调整大小
【发布时间】:2010-06-03 16:20:35
【问题描述】:

我有一个使用中继器的 mxml 面板。面板可以水平调整大小,我希望重复的组件与面板一起调整大小。下面是一个简单的例子:

<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" ...>
    <!-- scripts and some controls -->
    <mx:VBox width="100%">
        <core:Repeater width="100%" dataProvider="model">
            <ns1:MyItemRenderer width="100%" />
        </core:Repeater>
    </mx:VBox>
</mx:TitleWindow>

当我调整组件大小时,重复项的宽度不会改变。

还有按钮和事件处理程序,用于在模型中添加和删除项目。完成后,转发器会更新以显示正确数量的项目,并且所有项目的大小都会正确调整。

当根面板调整大小时,我无法让项目调整大小。我可以看到,中继器周围的 VBOx 正在接收调整大小事件。但是,重复的项目没有得到事件。我尝试从连接到 VBox 的调整大小处理程序手动将调整大小事件分派给重复的项目,但这没有帮助。

我还尝试从作为 dataProvider 的 ArrayCollection 添加和删除一个虚拟项目(因为这会触发正确的调整大小,否则如上所述)但是,在 VBox 的调整大小处理程序中执行此操作只会导致转发器不显示任何项目。

有什么方法可以让中继器中的项目随其封闭容器调整大小?

我使用的 ItemRenderer 在 mx:List 中使用时可以正确调整大小。它是这样构建的,因此当在中继器中使用时,它可以与 List 容器设置的数据属性和 getRepeaterItem() 一起使用。在这种特殊情况下,我不能将 List 用作容器,因为它在通过 rowCount、height 和 maxHeight 属性控制其高度方面的行为方式在这种特殊情况下对我来说不起作用(我省去了详情)。

【问题讨论】:

    标签: apache-flex repeater resizable


    【解决方案1】:

    覆盖 titleWindow 中的 updateDisplayList,当高度或宽度发生变化时,使中继器内创建的每个项目的 displayList 无效。

    也就是说,使用中继器通常被认为是不好的做法,因为其中的每个组件都会被渲染。一个基于列表的类——它利用了渲染器回收,被认为性能更高。

    根据您的代码段,我不知道您的代码是否可以在没有中继器的情况下重新工作。

    【讨论】:

    • 谢谢,但在我的情况下,使重复组件上的 displayList 无效并不会导致调整大小。
    【解决方案2】:

    为了记录,我想出了以下“解决方案”:

    在包含中继器的框上使用 maxHeight 属性,将其绑定到从其他组件派生正确值的表达式...我仍然需要硬编码我想为包含在框之后的组件保留的任何空间如果我不想将它们推出封闭面板,请使用中继器,但现在已经足够了。

    基本上:

    <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" ...>
        <!-- scripts and some controls -->
        <mx:VBox id="outerBox" height="100%">
            <mx:VBox id="innerBox" width="100%"
                     maxHeight="{outerBox.height - innerBox.y - 40}"> 
                     <!-- reserve 40 px for the button -->
                <core:Repeater width="100%" dataProvider="model">
                    <ns1:MyItemRenderer width="100%" />
                </core:Repeater>
            </mx:VBox>
            <mx:Button label="Stay Visible"/>
        </mx:VBox>
    </mx:TitleWindow>
    

    【讨论】:

      猜你喜欢
      • 2013-12-13
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2015-09-28
      • 2016-11-10
      • 2012-01-17
      相关资源
      最近更新 更多