Flex中继器中的复选框可见性绑定

时间:2009-11-20 01:19:58

标签: flex

我正在尝试将复选框控件的可见性动态绑定到转发器的数据字段,如下所示。

<mx:Repeater id="rptrQuestions" dataProvider="{QuestionsXMLList}">
    <mx:HBox>
        <mx:CheckBox id="chkQ" 
            visible="{rptrQuestions.currentItem.CheckBox.@Visible}" 
            includeInLayout="{rptrQuestions.currentItem.CheckBox.@Visible}"/>
    </mx:HBox>
</mx:Repeater>

此代码似乎不起作用,因为复选框始终显示。

任何人都知道问题可能是什么?

2 个答案:

答案 0 :(得分:0)

我经常遇到使用中继器的问题。我试图避免使用它们,因为它们似乎不可预测,并且它们使用大量内存,因为它们一次构建所有包含项目而不是推迟它们直到它们被显示。

您可以尝试使用带有自定义ItemRenderer的List,如下所示:

<mx:List id="lstQuestions" dataProvider="{QuestionsXMLList}"
    itemRenderer="full.path.to.CustomListItemRenderer" />

CustomListItemRenderer:

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:CheckBox id="checkBox" label="{expo.name}"
         visible="{question.CheckBox.@Visible}"
         includeInLayout="{question.CheckBox.@Visible}" />

    <mx:Script>
        <![CDATA[

        [Bindable]
        private var question:QuestionXMLListItem;

        public override function set data(value:Object):void
        {
            question = QuestionXMLListItem(value);
        }

        public override function get data():Object
        {
            return question;
        }

        ]]>
    </mx:Script>
</HBox>

您可以使用CSS为列表提供与转发器相同的外观和感觉。

答案 1 :(得分:0)

转发器内任何组件的可见性无法通过其ID进行控制。

你应该向数据提供者添加一个虚拟变量,说出QuestionsXMLList.myVisibility并运行一个循环来设置它的可见性,就像这样,

for(var i=0, i<QuestionsXMLList.length, i++)
{
   QuestionsXMLList[i].myVisibility = false;
}