2011-04-27 55 views
0

我有一个中继器,用于创建名为“Block”的自定义组件。我需要这样做,以便当用户单击按钮时,由转发器创建的所有块都将其可见字段设置为false(然后再次单击该按钮时为true)。Flex 3:由中继器创建的隐藏元素

下面是一些代码,我现在所拥有的:

<mx:Repeater id="indPositions" dataProvider="{projectPositions}" startingIndex="0"> 
     <components:block height="24" 
      width="100%" id="thisBlock" visible="true" horizontalScrollPolicy="off" 
      oneDay="{oneDay}" 
     /> 
    </mx:Repeater> 

这里的按钮,用户会点击显示/隐藏块:

<mx:Button id="showHideButton" label="Show Project" x="{addBlock.x + addBlock.width + 2}" click="showProjectSwitch();" /> 

这里的功能showProjectSwitch():

public function showProjectSwitch():void { 
      if (showHideButton.label == "Hide Project") 
      { 
       showHideButton.label = "Show Project"; 
       indPositions.visible = false; 
       thisProject.height = 65; 
      } 
      else 
      { 
       showHideButton.label = "Hide Project"; 
       indPositions.visible = true; 
       thisProject.height = projectHeight ; 
      } 
     } 

我试着设置projectRP.visible =“true/false”,但它没有工作:(

我也尝试在转发器周围包裹画布,但是当我这样做时...尽管事实上我有startIndex =“0”和count =“16”,但转发器只运行一次。然后我删除了画布标签,并且中继器运行了正确的次数。

有人能帮助我吗?

回答

0

实现你想要的最简单的方法就是使用数据绑定,就像你对“oneDay”值所做的一样。

<mx:Repeater id="indPositions" dataProvider="{projectPositions}" startingIndex="0"> 
    <components:block height="24" 
     width="100%" id="thisBlock" visible="true" horizontalScrollPolicy="off" 
     oneDay="{oneDay}" 
     visible="{showBlocks}" 
    /> 
</mx:Repeater> 
<mx:Boolean id="showBlocks" /> 

[编辑为了更加清晰] 要更改块的知名度,你需要设置showBlocks的价值,就像这样:

showBlocks = true; 

showBlocks = false; 
+0

你能解释一下这个吗? 不是组件类型,即使它是,我不知道我是否理解这将如何改变块的可见状态。 – Brds 2011-04-27 20:38:17

+0

相当于在Actionscript中声明一个布尔变量,因此您可以将它分配为true或false。每个块都通过添加属性visible =“{showBlocks}”与这个变量数据绑定。无论何时为“showBlocks”赋值true,所有块都会将它们的“visible”属性设置为true。 – 2011-04-28 14:40:17

0

下面是我解决它的方法...因为每当创建块时声明变量名称“thisBlock”,所有这些信息都存储在rray。学习之后,我能创造一个,用于在功能每个循环按下了显示/隐藏按钮时被称作......在每个循环是这样的:

for (var I:int = 0; i < dataprovidername.length; i++) 
    thisBlock[i].visible = true/flase; 

希望可以帮助有人在未来。