Функция набора Flex не вызывается

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

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

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

вопрос задан 8.10.2009
CodeMonkey
195 репутация

2 ответов


  • 8 рейтинг

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

    Является ли 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 сделала это таким образом, чтобы избежать избыточности в связывании.

    ответ дан Amarghosh, с репутацией 47828, 8.10.2009
  • 1 рейтинг

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

    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 свойства, даже если значение свойства совпадает.

    ответ дан Pankaj Akhilesh Panday, с репутацией 11, 2.02.2012