我有一点问题(因为我不习惯与AS3绑定),问题是我想做这种数据绑定:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white">
<mx:XML id="dp" source="countries_states_cities.xml" format="e4x" />
<mx:Form>
<mx:FormItem label="Country:">
<mx:ComboBox id="countryCB"
dataProvider="{dp.country}"
labelField="@name" />
</mx:FormItem>
<mx:FormItem label="State:">
<mx:ComboBox id="stateCB"
dataProvider="{countryCB.selectedItem.state}"
labelField="@name" />
</mx:FormItem>
<mx:FormItem label="City:">
<mx:ComboBox id="cityCB"
dataProvider="{stateCB.selectedItem.city}"
labelField="@name" />
</mx:FormItem>
</mx:Form>
但ComboBoxes是用AS3动态创建的,除了我不能将第二个ComboBox dataProvider绑定到第一个ComboBox的selectedItem中的XMLList之外,一切正常。
答案 0 :(得分:3)
我猜你需要运行时绑定。它是使用BindingUtils类完成的,例如,请参阅this。至于你的情况,它必须像
BindingUtils.bindProperty(secondCombobox, "dataProvider",
firstCombobox, "selectedItem");
答案 1 :(得分:2)
您是否根据数据动态创建?如果是这样,您可以始终使用Repeater组件重复您要完成的任务。
<mx:Repeater dataProvider="{someData}">
<mx:FormItem label="{data.label}">
<mx:ComboBox dataProvider="{data.stateCB.selectedItem.city}"
labelField="@name" />
</mx:FormItem>
</mx:Repeater>
答案 2 :(得分:0)
谢谢,这正是我想要的,对我有用的代码行是这样的:
BindingUtils.bindProperty(comboBox, 'dataProvider', parentCB, {name: 'selectedItem', getter: function (host:ComboBox):XMLList {
var dp:XMLList;
if (host.selectedIndex >= 0) dp = host.selectedItem.children();
else dp = new XMLList();
return dp;
}}, true);
但是,我无法访问该功能内部的“网站”,只能访问“主机”。基本上我要做的是让第二个ComboBox以selectedIndex = -1
开始