我想在ButtonBar上生成一个带有一些禁用按钮的按钮序列:
<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:我通过添加updateComple事件处理程序找到了解决方案:
function upd()
{
trace("upd()");
for (var i:int=0; i < btnBar.numChildren; i++)
{
if ([condition])
{
Button(btnBar.getChildAt(i)).enabled=false;
}
}
}
有人有更好的解决方案吗?
答案 0 :(得分:1)
ButtonBar将dataProvider中的项目视为通用对象。除了label之外,它不会查看这些对象的值。列表类的工作方式是labelField,labelFunction和名为itemToLabel的方法。我假设ButtonBar使用类似的方法。
只要组件需要从dataPRovider中的项目中查找标签,就会调用itemToLabel函数。它不会查看dataProvider中的其他设置,这就是dataProvider中enabled属性无效的原因。
我不清楚为什么要禁用ButtonBar中的按钮。知道这将有助于我们指导您放置代码的位置。使用ButtonBar的updateComplete事件将在每次更新组件的可视显示时运行该代码,这可能是您不想要的。
您可以在creationComplete上运行此代码,这是一次性事件。但是,如果您需要不断更新,这将无法正常工作。