与as3的数据绑定

时间:2011-03-19 11:56:01

标签: flex actionscript-3 binding

我有一点问题(因为我不习惯与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之外,一切正常。

3 个答案:

答案 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

开始