apache-flex - 绑定(bind)到对象属性

标签 apache-flex data-binding actionscript air mxml

AS

[Bindable]
var object:Object = {
    property: "Property"
};

MXML

<s:Label text="{object.property}"/>

标签文本将为“Property”,但如果 object.property 发生更改,标签不会更新。有什么办法可以解决这个问题吗?

最佳答案

除非实现,否则对象或集合的属性不会调度属性更改事件。

与您的示例类似,不会绑定(bind)对数组元素的更改。

诸如 ArrayCollection 之类的集合将对象包装在代理内以调度事件进行绑定(bind)。

使用ObjectProxy来分派(dispatch)对对象的更改。

实例化一个ObjectProxy并监听PropertyChangeEvent:

objectProxy = new ObjectProxy(object);
objectProxy.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, propertyChangeHandler);

通过代理访问您的对象,例如设置名为“property”的属性:

objectProxy.property = "Hello, world";

此示例创建一个带有计时器的 ObjectProxy,每秒更改“property”成员:

<?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"
               minWidth="955"
               minHeight="600"
               creationComplete="creationCompleteHandler(event)">


    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;
            import mx.events.PropertyChangeEvent;
            import mx.utils.ObjectProxy;


            private var object:Object = {};
            private var objectProxy:ObjectProxy;

            private var timer:Timer;

            protected function creationCompleteHandler(event:FlexEvent):void
            {
                objectProxy = new ObjectProxy(object);
                objectProxy.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, propertyChangeHandler);

                timer = new Timer(1000);
                timer.addEventListener(TimerEvent.TIMER, timerHandler);
                timer.start();
            }

            protected function propertyChangeHandler(event:PropertyChangeEvent):void
            {
                label.text = (event.source).property;
            }

            protected function timerHandler(event:TimerEvent):void
            {
                objectProxy.property = Math.random() * 1000;
            }
        ]]>
    </fx:Script>


    <s:Label id="label" />


</s:Application>

关于apache-flex - 绑定(bind)到对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8265029/

相关文章:

actionscript-3 - 如何将 bytearray 转换为图像或将图像转换为 bytearray ?

php - 使用 PHP 作为后端的 Flex Remoting 问题

flash - 调用 example Function() 和 example Function.call() 有什么区别?

Javascript数据将元素属性绑定(bind)到URL中的 anchor href

angular - 数据绑定(bind)不更新 w/嵌套 ngFor 循环

actionscript-3 - Flash 开发、Flash 语言 (AS2/3) 和 Flash IDE 的隐藏特性/技巧

apache-flex - 在 Function 中访问 savedThis 属性

android - 无法解决 MainActivityBinding 以及绑定(bind)相关问题

flash - Flash 中的哪些文本被 Google 编入索引?

javascript - ActionScript 3 事件监听器和带参数的函数