绑定到数组集合的数据不起作用

时间:2012-10-03 17:38:22

标签: actionscript-3 flex

我试图根据我在这个可绑定数组集合中是否存在特定字符串来使CheckBox元素可见,但它似乎不起作用。如果有人可以指出我做错了什么,我真的很感激。

在我的动作代码中,我有

[Bindable]private var dataTypesUsed:ArrayCollection = new ArrayCollection();

在我的flex代码中,我有

<s:CheckBox selected="true" label="test" id="testBox" visible="{dataTypesUsed.contains('Target')}" includeInLayout="{dataTypesUsed.contains('Target')}"/>

1 个答案:

答案 0 :(得分:5)

问题是contains()的{​​{1}}方法不是[Bindable]。在MXML大括号表达式中,属性链中的所有内容都必须是[Bindable]。

通常,当大括号表达式中的某个属性不是[Bindable]时,Flex编译器会发出警告。如果其中一个属性是函数,则不会生成警告,我认为这是一个有用的快捷方式。

功能可以标记为[Bindable]。只要在类中定义函数的某处,就会调度“绑定”事件。看一下ArrayCollection的源代码 - 这是实际定义ListCollectionView方法的类。

您会看到contains()方法未标记为[Bindable],相反,contains()方法是。

您可以通过几种不同的方式解决问题。这是一个调度自定义绑定事件的方法:

getItemAt()

不同之处在于,当您未在[Bindable]元数据中指定事件名称时,Flex会使用默认的“propertyChanged”事件。

在你的场景中,没有任何东西调度“propertyChange”事件来触发绑定(b / c属性字面上没有改变)。此外,未使用该集合调度的“collectionChange”事件b / c [Bindable("dataTypesUsedChanged")] private var dataTypesUsed:ArrayCollection = new ArrayCollection(); private function someMethodThatUpdatesTheCollection():void { dataTypesUsed.addItem("foo"); // addItem will make the collection dispatch CollectionEvent.COLLECTION_CHANGE dispatchEvent(new Event("dataTypesUsedChanged") } <s:CheckBox visible={dataTypesUsed.contains('foo')} /> 方法未标记为[Bindable]。