0

我的设置非常基本。我有一个带有自定义 itemRenderer 和 dataprovider 的 s:List。我想做的是访问项目渲染器的生成实例,但我不知道如何。

这是列表的代码:

<s:List id="layersList" 
            borderVisible="false"  
            allowMultipleSelection="true" 
            contentBackgroundAlpha="0" 
            itemRenderer="renderers.LayerRenderer" 
            dataProvider="{AssetsCollection}">
     <s:layout>
    <s:VerticalLayout gap="1"  />           
     </s:layout>
<s:list>

我想要的是访问生成的渲染器,例如:

layersList.renderers[selectedIndex] or layersList.selectedItems[0].renderer. 为了访问它的一些内部对象。就像在事件中我想监听从 List 的父级在渲染器实例中调度的事件一样。

任何人都可以帮忙吗?

4

1 回答 1

1

Lists/ItemRenderers 的概念模型是它们是 dataProvider 中项目的表示。记住这一点的一个原因是,列表会回收其 ItemRenderer 以减少内存占用。这意味着您的 dataProvider 中可能有 100 个项目,但其中只有一小部分会有与之关联的 ItemRenderer,其中一些甚至可能在屏幕上不可见,甚至不再有效。有几种方法可以让 List 中的 ItemRenderers 反映 List 父级的状态,而无需直接操作渲染器。例如,您可以执行以下操作:

<s:List id="layersList" 
        borderVisible="false" 
        allowMultipleSelection="true" 
        dataProvider="{AssetsCollection}"
        contentBackgroundAlpha="0">
    <s:layout>
        <s:VerticalLayout gap="1" />      
    </s:layout>
    <s:itemRenderer>
        <fx:Component>
            <myrenderers:TestRenderer myState="{outerDocument.someState}"/>
        </fx:Component>
    </s:itemRenderer>
</s:List>

其中 TestRenderer 有一个名为 myState 的可绑定公共属性。List 的父级有一个名为“someState”的可绑定属性。然后在您的渲染器中,您可以根据 myState 的值设置一些条件逻辑。希望有帮助。

于 2010-07-21T18:13:34.020 回答