apache-flex - Flex 中的某些 [Bindable] 属性有效,有些则无效

标签 apache-flex data-binding bindable

问题已解决,见下文

问题

我在 Flex Builder 3 中工作,我有两个 ActionScript 3 类(ABCXYZ)和一个 Flex MXML 项目(main.mxml)。我有一个 XYZ 的实例作为 ABC 的属性,我希望 XYZ 的属性可见([Bindable] ) 在文本控件中的 Flex 项目中。

不幸的是,只有 prop3prop4 在更改时更新。我已经进入调试器以确保 prop1prop2 发生变化,但它们没有在文本控件中更新。

代码如下:

ABC.as

[Bindable]
public class ABC extends UIComponent {
    /* Other properties */

    public var xyz:XYZ = new XYZ();

    /* Methods that update xyz */
}

XYZ.as

[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 */
}

主.mxml

<?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>

回答

从我发布的小代码片段中看不出来,但在 XYZ 中,我正在使用它们的 setter 更新 _prop3_prop4。相反,我通过它们的私有(private)变量而不是它们的 setter 更新了 _prop1_prop2。因此,属性 1 和 2 没有调度更新事件。

最佳答案

看起来你的 setter/getter 正在返回空隙。根据您的字段类型,它们应该返回单位。

否则您的代码应该可以正常工作。我已经组装并测试了一个带有设置所有四个值的计时器的工作版本,因此您可以看到所有四个更新:

主.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>

ABC.as

package
{
    import mx.core.UIComponent;

    [Bindable]
    public class ABC extends UIComponent
    {
        public var xyz:XYZ = new XYZ();

        public function ABC()
        {
            super();
        }
    }
}

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;
        }
    }
}

看看那些,插上电源,您应该会看到它们全部组合在一起。如果您有任何问题,请回帖。干杯。

关于apache-flex - Flex 中的某些 [Bindable] 属性有效,有些则无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1106758/

相关文章:

wpf - 每次击键而不是在用户输入结束时都调用转换器

xamarin - 在 Xamarin Forms 上创建 ICommand Bindable 属性

xamarin - 如何使用具有可绑定(bind)布局的网格(多于一列)

c++ - FlasCC:Vector.<Number> 和 double[] 之间的互操作

data-binding - Grails 数据绑定(bind)

c# - 有了entity framework还需要bindingsource吗

properties - xamarin.forms 中自定义控件的 HeightRequest 的自定义 BindableProperty

apache-flex - Shockwave、Flash 和 Flex 之间有什么区别?

apache-flex - Actionscript Loader.loadBytes() 默默地退出,完整事件从未触发

css - 如何在不将图像嵌入外部样式表的情况下将图像用于皮肤