【问题标题】:DataBinding Spark RadioButtonGroup to Spark RadioButton Value将 Spark RadioButtonGroup 数据绑定到 Spark RadioButton 值
【发布时间】:2011-07-19 14:53:48
【问题描述】:

我有两个单选按钮正在尝试绑定到 dataProvider 的值。它最初填充该值,但如果我在代码中更改 dp 它不会做任何事情。我错过了什么吗?

这是一个工作示例

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx"
>
    <fx:Declarations>
        <s:RadioButtonGroup id="oneGroup" selectedValue="{dataProvider.one}"/>
        <s:RadioButtonGroup id="twoGroup" selectedValue="{dataProvider.two}"/>
    </fx:Declarations>
    <fx:Script>
        <![CDATA[

            import mx.collections.ArrayCollection;

            [Bindable] 
            public var dataProvider:Object = {one:"active",two:false};

            public function doinit(e:Event):void {
                dataProvider.one = dataProvider.one == "inactive" ? "active":"inactive";
                dataProvider.two = !dataProvider.two;
                result.text = dataProvider.one + ":" + dataProvider.two; 
            }
        ]]>
    </fx:Script>
    <mx:HBox>
        <mx:Form>
            <mx:FormItem label="One" direction="horizontal" >
                <s:RadioButton groupName="oneGroup" value="active" label="Active" />
                <s:RadioButton groupName="oneGroup" value="inactive" label="Inactive" />
            </mx:FormItem>
            <mx:FormItem label="Two" direction="horizontal" >
                <s:RadioButton groupName="twoGroup" value="true" label="True" />
                <s:RadioButton groupName="twoGroup" value="false" label="False" />
            </mx:FormItem>
            <s:Button label="Change DP" click="doinit(event)" />
            <s:Label id="result" />
        </mx:Form>
    </mx:HBox>
</s:Application>

文档链接... http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/RadioButtonGroup.html#selectedValue

【问题讨论】:

  • 所以我用你的例子来制作一个可绑定的类。然后我花了大约一个小时弄清楚 s:Label.text 是不可绑定的 - 哇!我还找到了自定义的“[Bindable(event="OneChanged")] 我可以添加然后从设置器调度以优化绑定。感谢您的帮助。

标签: data-binding radio-button flash-builder flex4.5 selectedvalue


【解决方案1】:

尝试使用以下类来发挥数据绑定的优势:

package
{

[Bindable]
public class DP
{
    public var one:String;
    public var two:Boolean;

    public function DP(one:String, two:Boolean)
    {
        this.one = one;
        this.two = two;
    }
}
}

所以对于您的示例:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx"
    >
    <fx:Declarations>
        <s:RadioButtonGroup id="oneGroup" selectedValue="{dataProvider.one}"/>
        <s:RadioButtonGroup id="twoGroup" selectedValue="{dataProvider.two}"/>
    </fx:Declarations>
    <fx:Script>
    <![CDATA[
        [Bindable] 
        public var dataProvider:DP = new DP("active", false);

        public function doinit(e:Event):void {
            dataProvider.one = "inactive";
            dataProvider.two = true;
        }
    ]]>
    </fx:Script>
    <mx:HBox>
        <mx:Form>
            <mx:FormItem label="One" direction="horizontal" >
                <s:RadioButton group="{oneGroup}" value="active" label="Active" />
                <s:RadioButton group="{oneGroup}" value="inactive" label="Inactive" />
            </mx:FormItem>
            <mx:FormItem label="Two" direction="horizontal" >
                <s:RadioButton group="{twoGroup}" value="true" label="True" />
                <s:RadioButton group="{twoGroup}" value="false" label="False" />
            </mx:FormItem>
            <s:Button label="Change DP" click="doinit(event)" />
        </mx:Form>
    </mx:HBox>
</s:Application>

【讨论】:

  • 所以我用你的例子绑定到一个类,然后我花了大约一个小时弄清楚 s:Label.text 是不可绑定的。我还发现了可以添加的自定义更改事件,例如 [Bindable(event="OneChanged")]
【解决方案2】:

fwiw,这是使标准对象可绑定的代码。忽略我对上面 s:Label 的评论,不知道为什么这对我不起作用。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx">
    <fx:Script>
    <![CDATA[

        [Bindable(event="OneChanged")] 
        public var dataProvider:Object = {one:"one"};

        private function changeOne():void{

            switch(dataProvider.one){
                case "one":
                    // property
                    dataProvider.one="two"; 
                    break;
                case "two":
                    // whole value
                    dataProvider = {one : "one"};
                    break;
            }
            dispatchEvent (new Event ("OneChanged"));
        }
    ]]>
    </fx:Script>
    <s:VGroup>
        <s:Label text="{dataProvider.one}" />
        <s:Button click="changeOne()" label="Next" />
    </s:VGroup> 
</mx:Application>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 2011-10-25
    相关资源
    最近更新 更多