Data binding 数据绑定Spark RadioButton组到Spark RadioButton值
我有两个单选按钮,试图绑定到数据提供者的值。它最初填充值,但如果我在代码中更改dp,它不会做任何事情。我错过什么了吗 下面是一个工作示例Data binding 数据绑定Spark RadioButton组到Spark RadioButton值,data-binding,radio-button,flash-builder,flex4.5,selectedvalue,Data Binding,Radio Button,Flash Builder,Flex4.5,Selectedvalue,我有两个单选按钮,试图绑定到数据提供者的值。它最初填充值,但如果我在代码中更改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" x
<?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>
链接到文档。。。
尝试使用以下类以获得数据绑定的优势:
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>
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>
所以我使用了您的示例绑定到一个类,然后我花了大约一个小时来计算s:Label.text是不可绑定的。我还发现了可以添加的自定义更改事件,例如[Bindable(event=“OneChanged”)],因此我使用了您的示例来创建一个Bindable类。然后,我花了大约一个小时才发现s:Label.text是不可绑定的-wee!我还找到了自定义“[Bindable(event=“OneChanged”)]我可以添加,然后从setters中分派以优化绑定。感谢您的帮助。