Функция набора Flex не вызывается - PullRequest
5 голосов
/ 08 октября 2009

Хорошо, я бился головой об стену с этим. У меня есть следующая функция set во Flex.

    public function set periodChangeAmount(value:int):void
    {
        _PeriodChangeAmount = value;
        refreshStartEndDates();
    }   

Если я устанавливаю periodChangeAmount в -1 или 1, метод set срабатывает. Если я установлю его на ноль, он не будет уволен. В чем дело? Кто-нибудь знает, почему он не вызывается при установке его на ноль. Если я изменю тип объекта на число или даже на объект, он все равно не будет работать должным образом. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

8 голосов
/ 08 октября 2009

Вы поместили след в установщик, чтобы убедиться, что он не вызывается?

Является ли periodChangeAmount Bindable свойством чтения-записи? В этом случае flex внутренне вызывает метод получения, чтобы убедиться, что устанавливаемое значение не является существующим значением. Если текущее значение свойства (возвращаемое получателем) совпадает со значением, которое должно быть установлено, установщик не вызывается.

private var privateVar:Boolean = false;

[Bindable]
public function set readWriteProp(value:Boolean):void
{
    trace("set called with " + value + " current is " + privateVar);
    privateVar = value;
}
public function get readWriteProp():Boolean
{
    trace("get called : " + privateVar);
    return privateVar;
}
//...
a.readWriteProp = true;
a.readWriteProp = true;

Отслеживаемый вывод:

Вызов: ложь
набор, вызванный с истинным током, является ложным
получить вызов: правда

Обратите внимание, что метод получения вызывался дважды, но метод вызывался только один раз. Во втором назначении, поскольку текущее значение и значение, которое должно быть установлено, одинаковы (true), установщик не вызывается.

Я считаю, что команда разработчиков Flex сделала это таким образом, чтобы избежать избыточности в связывании.

1 голос
/ 02 февраля 2012

Чтобы решить вышеуказанную проблему, вы можете добавить связываемое Событие и отправить это событие перед настройкой любых свойств, как показано ниже.

private var privateVar:Boolean = false; 
[Bindable( "bindableEventProperty" )] 

public function set readWriteProp(value:Boolean):void
{     
    trace("set called with " + value + " current is " + privateVar);  
    privateVar = value; 
}
public function get readWriteProp():Boolean 
{  
    trace("get called : " + privateVar);    
    return privateVar;
}

dispatchEvent( new Event( "bindableEventProperty" ));
a.readWriteProp = true;
a.readWriteProp = true; 

Это событие обеспечивает вызов метода set свойства, даже если значение свойства совпадает.

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