我正在尝试将复选框控件的可见性动态绑定到转发器的数据字段,如下所示。
<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>
此代码似乎不起作用,因为复选框始终显示。
任何人都知道问题可能是什么?
答案 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;
}