Доступ к экземпляру itemRenderer во Flash Buiilder 4 - PullRequest
0 голосов
/ 21 июля 2010

Моя настройка довольно проста. У меня есть s: List с пользовательским itemRenderer и провайдером данных. Я хотел бы получить доступ к сгенерированным экземплярам средства визуализации элементов, но я понятия не имею, как это сделать.

Вот код для списка:

<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.

Может кто-нибудь помочь?

1 Ответ

1 голос
/ 21 июля 2010

концептуальная модель Lists / ItemRenderers заключается в том, что они представляют собой элементы в dataProvider. Одной из причин для этого является то, что списки перерабатывают свои ItemRenderers, чтобы уменьшить объем памяти. Это означает, что у вас может быть 100 элементов в вашем dataProvider, но только у небольшого подмножества этих элементов будут связаны ItemRenderers, а некоторые из них могут даже не отображаться на экране или даже быть недействительными. Есть несколько способов, с помощью которых ваши 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. Надеюсь, это поможет.

...