2009-11-20 50 views
0

我试图按如下方式将复选框控件的可见性动态绑定到中继器的数据字段。Flex中继器中的复选框可见性绑定

<mx:Repeater id="rptrQuestions" dataProvider="{QuestionsXMLList}"> 
    <mx:HBox> 
     <mx:CheckBox id="chkQ" 
      visible="{[email protected]}" 
      includeInLayout="{[email protected]}"/> 
    </mx:HBox> 
</mx:Repeater> 

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

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

+0

发布的数据提供者的结构 – Amarghosh 2009-11-20 04:43:59

回答

0

我经常遇到使用中继器的麻烦。我尽量避免使用它们,因为它们看起来不可预测,并且它们使用大量内存,因为它们一次构建所有包含的项目,而不是延迟显示它们。

你可以尝试使用列表使用自定义的ItemRenderer,这样的事情:

<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="{[email protected]}" 
     includeInLayout="{[email protected]}" /> 

    <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来给列表相同的外观和感觉中继器会得到。

+0

可能似乎没有得到这工作。我确信我只是在误解一些东西。我的解决方案:我在一个中继器中使用了一个中继器。内部中继器内部有复选框控制。内部中继器绑定到CheckBox XML节点的存在(而不是使用“Visible”属性),所以如果我不创建该XML节点就不会出现。 – 2009-11-21 15:28:46

0

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

您应该添加一个虚拟变量给dataProvider说QuestionsXMLList.myVisibility并运行一个循环来设置它的可见性这样的事情,

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