2010-07-03 71 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上運行此代碼,這是一次性事件。但是,如果你需要不斷的更新,這是行不通的。