2010-07-03 72 views
0

我要产生一些禁用的按钮上的按钮栏按钮顺序:柔性按钮栏问题

<mx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 

      [Bindable] 
      public var nav:ArrayCollection=new ArrayCollection(); 

      ... 

      function initApp():void 
      { 
       nav.removeAll(); 

       for(var i:uint=0;i<navSize;i++) 
       { 
       nav.addItem({label: i }); 
       } 

       nav.addItem({label: "Last", enabled:false}); 

      } 
     ]]> 
    </mx:Script>     
... 
<mx:ButtonBar id="btnBar" dataProvider="{nav}"/> 

但为什么最后一个按钮仍处于启用状态?

UPD:

function upd() 
      { 
       trace("upd()"); 
       for (var i:int=0; i < btnBar.numChildren; i++) 
       { 
        if ([condition]) 
        { 
         Button(btnBar.getChildAt(i)).enabled=false; 
        } 
       } 
      } 

人有更好的解决办法:我加入updateComple事件处理程序中发现的解决方案?

回答

1

ButtonBar将dataProvider中的项视为通用对象。它不会将这些对象看作标签以外的值。列表类的工作方式是有一个labelField,一个labelFunction和一个名为itemToLabel的方法。我假设ButtonBar使用了类似的方法。

只要组件需要从dataPRovider中的项中找到标签,就会调用itemToLabel函数。它不会针对其他设置查看您的dataProvider,这就是为什么dataProvider中的enabled属性不起作用。

我不清楚你为什么要禁用ButtonBar中的按钮。知道这将有助于我们为您提供代码放置位置的方向。每次更新组件的可视化显示时,使用ButtonBar的updateComplete事件都会运行该代码,这可能不是您想要的。

您可以在creationComplete上运行此代码,这是一次性事件。但是,如果你需要不断的更新,这是行不通的。