好的我有一个ComboBox,dataProvider是一个带有标签属性的对象数组,这些对象为ComboBox提供了选项列表。Flex:有没有办法将ComboBox的selectedItem绑定到变量上?
有没有办法让我有一个像mySelectedItem这样的变量,并将ComboBox的selectedItem绑定到它,这样如果它发生变化,ComboBox的selectedItem会变成它是什么?
我希望这是有道理的。
谢谢!
好的我有一个ComboBox,dataProvider是一个带有标签属性的对象数组,这些对象为ComboBox提供了选项列表。Flex:有没有办法将ComboBox的selectedItem绑定到变量上?
有没有办法让我有一个像mySelectedItem这样的变量,并将ComboBox的selectedItem绑定到它,这样如果它发生变化,ComboBox的selectedItem会变成它是什么?
我希望这是有道理的。
谢谢!
是的,ComboBox的selectedItem属性是可绑定的。
它会去是这样的:
<mx:ComboBox selectedItem="{mySelectedItem}">
</mx:ComboBox>
在您的AS:
[Bindable]
var mySelectedItem:Object;
更改mySelectedItem应该在组合框显示。如果在ComboBox的dataProvider中不存在由mySelectedItem引用的项目,则可能会出错。
使用Change
事件的事件侦听器并在那里处理。
// update a label item's text with that of the Combobox's selectedItem
private function changeEvt(event:Event):void {
label.text =event.currentTarget.selectedItem.label + " " +
}
从表面上看,它是那样简单:
<mx:ComboBox id="myComboBox"
dataProvider="{myDataProvider}"
selectedItem="{defaultItem}"/>
当您设置defaultItem(确保它是[绑定])在数据提供者的项目之一,它会更新该控件。
但是这种方法存在问题。除非currentDefaultItem始终在myDataProvider之后更改,否则与dataProvider的绑定可能会撤消选择,恢复为默认值(列表中的第一项)。
解决此问题的一个方法是,通过在提供selectedItem的调用中包含dataProvider,强制selectedItem在dataProvider之后重新启动。
<mx:ComboBox id="myComboBox"
dataProvider="{myDataProvider}"
selectedItem="{getSelectedItem(myComboBox.dataProvider, defaultItem)}"/>
这样做是为了确保当currentDefaultItem更改或dataProvider更改后,selectedItem会被反弹。我自己会对其他解决方案感兴趣。
我知道这是如何在文档中描述的。 由于对selectedItem的更改将触发更改侦听器。但对我而言,这并未发生。其他人遇到相同的行为?
这看起来像一个巨大的办法:让属性值可写: http://flex.sys-con.com/node/312098
或者,你可以做这样的事情,如果你不介意延长组合框; 这是伪代码(对不起,匹配识别取决于对象类型) - 但你的想法...
public class IndexRetainingComboBox extends ComboBox
{
public function IndexRetainingComboBox()
{
super();
}
override public function set dataProvider(value:Object):void
{
var originalSelection:Object = this.selectedItem;
super.dataProvider = value;
var newIdx:uint = [find originalSelection idx in combobox or return 0 ]
this.selectedIndex = newIdx;
}
}
我用的selectedIndex注意到了这一点。 – Panzercrisis 2012-11-02 13:01:14