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 - Adobe AIR - .air 到 .exe/.dmg/.rpm

c# - XAML GridView 模板绑定(bind)到项目

ActionScript 上的 Java Char

ios - 将编码的 .mp3 保存到 applicationStorageDirectory Adob​​e Air iOS

actionscript - 切片最后几个字符

apache-flex - Air Flex 最大同时上传 URL 请求数

android - 安卓模拟器上的八哥

apache-flex - 有没有办法在 Flex Builder 中找到未引用的代码?

.net - 使用 List<UIElement> 作为 ItemsControl 的 ItemsSource 会导致不应用 DataTemplate

android - textView 上的数据绑定(bind)空指针异常