簡體   English   中英

Flex 4:將 ArrayCollection 皮膚作為數據提供者提供給列表的 ItemRenderer

[英]Flex 4: Skins ArrayCollection as dataprovider to an ItemRenderer of a List

目標:我想將皮膚傳遞給列表的 itemRenderer(這是一個按鈕),並能夠為該列表中的每個按鈕設置皮膚。

這就是我所擁有的:

列表:

<s:List itemRenderer="renderers.ItemRenderer" dataProvider="{collectionWorkspace}" />

數組集合:

<s:ArrayCollection id="collectionWorkspace">
    <comp:Layout1 />
    <comp:Layout2 />
    <comp:Layout3 />
    <comp:Layout4 />
    <comp:Layout5 />
</s:ArrayCollection>

布局是帶有 HostComponent 按鈕的皮膚類。

項目渲染器:

<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
                xmlns:mx="library://ns.adobe.com/flex/halo"
                xmlns:s="library://ns.adobe.com/flex/spark">

    <s:states>
        <s:State name="normal" />
    </s:states>

    <s:Button skinClass="{data}"/>

</s:ItemRenderer>

我收到一個錯誤(為澄清而修復):錯誤:應用程序皮膚....找不到Button1。

您將skinClass屬性傳遞給皮膚 class 的實例,而不是實際的 class(按鈕需要創建自己的皮膚類實例)。

如果可以的話,最好的辦法是讓collectionWorkspace成為 Class 對象的數組,而不是實例的數組。

<s:ArrayCollection id="collectionWorkspace">
    <fx:Class>yourPkg.Layout1</fx:Class>
    <fx:Class>yourPkg.Layout2</fx:Class>
    <fx:Class>yourPkg.Layout3</fx:Class>
    <fx:Class>yourPkg.Layout4</fx:Class>
    <fx:Class>yourPkg.Layout5</fx:Class>
</s:ArrayCollection>

如果你不能這樣做,你應該能夠拉出實例的 class 並將其傳遞給skinClass

<s:Button skinClass="{Object(data).constructor}"/>

編輯:

默認情況下綁定不起作用,因為data在使用 class 初始化之前以null開始。 如果你給它null ,你會得到異常。 要修復它,您需要返回null和值之間的默認值:

<s:Button skinClass="{data != null ? data as Class : spark.skins.spark.ButtonSkin}"/>

我嘗試使用一些按鈕皮膚對ArrayCollection執行此操作。 有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM