And*_*ton 2 apache-flex data-binding bindable
问题解决了,见下文
我在Flex Builder 3中工作,我有两个ActionScript 3类(ABC和XYZ)和一个Flex MXML项目(main.mxml).我有XYZ一个属性的实例ABC,我希望在文本控件的Flex项目中XYZ显示属性([Bindable]).
不幸的是,只有prop3和prop4更新的时候都改变了.我已进入调试器以确保prop1并prop2更改,但它们未在文本控件中更新.
这是代码:
[Bindable]
public class ABC extends UIComponent {
/* Other properties */
public var xyz:XYZ = new XYZ();
/* Methods that update xyz */
}
Run Code Online (Sandbox Code Playgroud)
[Bindable]
public class XYZ extends Object {
private var _prop1:uint = 0;
private var _prop2:uint = 0;
private var _prop3:uint = 0;
private var _prop4:uint = 1;
public function get prop1():uint {
return _prop1;
}
public function set prop1(value:uint):void {
_prop1 = value;
}
/* getters and setters for prop2, prop3, and prop4 */
}
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:com="com.*" />
<com:ABC id="abc" />
<mx:Text text="{abc.xyz.prop1}" />
<mx:Text text="{abc.xyz.prop2}" />
<mx:Text text="{abc.xyz.prop3}" />
<mx:Text text="{abc.xyz.prop4}" />
</mx:Application>
Run Code Online (Sandbox Code Playgroud)
从我发布的小代码片段中看不出来,但是从XYZ我内部更新_prop3并_prop4使用他们的二传手.相反,我更新_prop1并_prop2通过他们的私有变量,而不是他们的setter.因此,属性1和2不分派更新事件.
看起来你的吸气剂正在回归空洞.根据你的田野类型,他们应该回归.
否则你的代码应该工作正常.我已经组装并测试了一个带有Timer的工作版本,它设置了所有四个值,因此您可以看到所有四个更新:
Main.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*" creationComplete="onCreationComplete()">
<mx:Script>
<![CDATA[
private function onCreationComplete():void
{
var t:Timer = new Timer(1000);
t.addEventListener(TimerEvent.TIMER, t_tick);
t.start();
}
private function t_tick(event:TimerEvent):void
{
var i:uint = Timer(event.currentTarget).currentCount;
abc.xyz.prop1 = i;
abc.xyz.prop2 = i;
abc.xyz.prop3 = i;
abc.xyz.prop4 = i;
}
]]>
</mx:Script>
<local:ABC id="abc" />
<mx:VBox>
<mx:Text text="{abc.xyz.prop1}" />
<mx:Text text="{abc.xyz.prop2}" />
<mx:Text text="{abc.xyz.prop3}" />
<mx:Text text="{abc.xyz.prop4}" />
</mx:VBox>
</mx:Application>
Run Code Online (Sandbox Code Playgroud)
ABC.as
package
{
import mx.core.UIComponent;
[Bindable]
public class ABC extends UIComponent
{
public var xyz:XYZ = new XYZ();
public function ABC()
{
super();
}
}
}
Run Code Online (Sandbox Code Playgroud)
XYZ.as
package
{
[Bindable]
public class XYZ extends Object
{
private var _prop1:uint = 0;
private var _prop2:uint = 0;
private var _prop3:uint = 0;
private var _prop4:uint = 1;
public function XYZ()
{
super();
}
public function get prop1():uint {
return _prop1;
}
public function set prop1(value:uint):void {
_prop1 = value;
}
public function get prop2():uint {
return _prop2;
}
public function set prop2(value:uint):void {
_prop2 = value;
}
public function get prop3():uint {
return _prop3;
}
public function set prop3(value:uint):void {
_prop3 = value;
}
public function get prop4():uint {
return _prop4;
}
public function set prop4(value:uint):void {
_prop4 = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
看看那些插件,你应该看到它们都融合在一起.如果您有任何疑问,请回复.干杯.
| 归档时间: |
|
| 查看次数: |
1647 次 |
| 最近记录: |