如何使属性可绑定?

时间:2009-12-01 03:31:41

标签: flex

我有一个这样的课。属性“isPag”基于提交的“ecboardid”,我发现当更改ecboardid时,UI控件似乎无法检测到“isPag”也被更改。那么,如何制作像这样的属性可绑定?

[Bindable]
public class Encoder extends EventDispatcher
{
    public var ecboardid : String;

   /*-.........................................Methods..........................................*/
    public function copyFrom(newEncoder:Encoder):void 
    {
        ecboardid = newEncoder.ecboardid;
        this.dispatchEvent(new Event('isPagChanged'));
    }

    [Bindable (event="isPagChanged")]
    public function get isPag():Boolean
    {
        if(this.ecboardid != null)
        {
            if(this.ecboardid.search('xxx') != -1)
            {
                return false;
            }

            return true;                
        }
        else
        {
            return false;
        }
    }
}

修改

如果我将属性更改为静态函数,

[Bindable]
public class Encoder extends EventDispatcher
{
    public var ecboardid : String;

   /*-.........................................Methods..........................................*/
    public function copyFrom(newEncoder:Encoder):void 
    {
        ecboardid = newEncoder.ecboardid;
        this.dispatchEvent(new Event('isPagChanged'));
    }

    public static function isPag(String ecboardid ):Boolean
    {
        if(ecboardid != null)
        {
            if(ecboardid.search('xxx') != -1)
            {
                return false;
            }

            return true;                
        }
        else
        {
            return false;
        }
    }
}

将像这样绑定:

visible = {Encoder.isPag(encoder.ecboardid)}

工作?当encoder.ecboardid改变时,会发生明显的变化吗?

3 个答案:

答案 0 :(得分:0)

我不相信您可以将只读属性设置为Bindable,因为Flex使用对setter方法的调用来发出更改事件。在有关绑定对象属性的部分中查看here

答案 1 :(得分:0)

你需要一个setter和一个getter。

此外,您将类标记为可绑定,如果您未指定事件名称,则该方法上的[Bindable]将是多余的。

通常编译器抱怨你是否只有一个getter而没有setter并尝试标记它[Bindable]

这样的代码:

visible = {Encoder.isPag(encoder.ecboardid)}

不具备约束力。 {var}表示法用于MXML。并且isPag不是静态的,因此您不能将其称为类属性。您需要一个Encoder类的实例才能合法。

答案 2 :(得分:0)

这是一个简单的更改 - 只需创建getter / setter并在setter中更改事件(更改值后),如下所示:

    private var _ecboardid : String;


    public function get ecboardid():String
    {
        return _ecboardid;
    }

    public function set ecboardid(value:String):void
    {
        _ecboardid = value;
        this.dispatchEvent(new Event('isPagChanged'));      
    }