基本约束问题

时间:2009-07-22 18:38:00

标签: flex actionscript-3 binding

我遇到了一个奇怪的绑定问题。在下面的迷你应用程序中,当'someText'发生更改时,Flex Label组件会更新,但在第一次初始调用后,我的boundSetter将不会被调用。

简而言之:为什么不调用boundSetterForSomeText()函数,而标签确实更新?

有人可以对这个根本问题有所了解吗?万分感谢!

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" minWidth="1024" minHeight="768"
    initialize="onInitialize()"
>
    <mx:Panel>
        <mx:Label text="{this.someText}" />
        <mx:Button label="Set random text" click="generateRandom()" />  
    </mx:Panel>

    <mx:Script>
        <![CDATA[
            import mx.binding.utils.ChangeWatcher;
            import mx.binding.utils.BindingUtils;


            [Bindable(event="xxx")]
            public var someText : String;


            public function onInitialize() : void
            {
                var cw:ChangeWatcher = BindingUtils.bindSetter(boundSetterForSomeText, this, ['someText']);
            }

            public function generateRandom() : void
            {
                this.someText = String( Math.round(Math.random() * 10000) );
                this.dispatchEvent(new Event("xxx"));
            }


            public function boundSetterForSomeText(obj:Object) : void
            {
                trace( obj );
            }
        ]]>
    </mx:Script>
</mx:Application>

2 个答案:

答案 0 :(得分:0)

当事件是默认时它确实有效。 (默认事件是propertyChange)

[Bindable]
public var someText : String;

我做了一些调试,我不知道为什么它不适用于自定义事件。我认为应该。

答案 1 :(得分:0)

您可以使用此代码创建get / set对或“property”:

private var _someText:String;

[Bindable(event="xxx")]
public function get someText():String
{
    return _someText;
}

public function set someText(value:String):void
{
    if (_someText != value)
    {
        _someText = value;
        this.dispatchEvent(new Event("xxx"));
    }
}