Как сделать недвижимость привязываемой? - PullRequest
0 голосов
/ 01 декабря 2009

У меня есть такой класс. Свойство «isPag» основано на поле «ecboardid», я обнаружил, что при изменении ecboardid элементы управления пользовательского интерфейса, похоже, не могут обнаружить, что «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;
        }
    }
}

Edit:

Если я изменю свойство на статическую функцию,

[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 голосов
/ 01 декабря 2009

Вам нужен как сеттер, так и геттер.

Кроме того, у вас есть класс, помеченный как привязываемый, если вы не указали имя события, тогда [Bindable] в методе будет избыточным.

Обычно компилятор жалуется, если у вас есть только геттер и нет сеттера, и пытаетесь пометить его [Bindable]

Код такой:

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

Не работает привязка. Нотация {var} предназначена для использования в MXML. И isPag не является статичным, поэтому вы не можете ссылаться на него как на свойство класса. Вам нужен экземпляр класса Encoder, чтобы это было допустимо.

0 голосов
/ 01 декабря 2009

Это простое изменение - просто создайте геттеры / сеттеры и отправьте событие изменения в сеттер (после изменения значения), например:

    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'));      
    }
0 голосов
/ 01 декабря 2009

Я не верю, что вы можете сделать свойства только для чтения Bindable, поскольку Flex использует вызовы метода set для свойства, чтобы выдавать события изменения. Взгляните здесь на раздел по привязке к свойствам объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...