Flex: make getter Bindable в объекте значения - PullRequest
1 голос
/ 11 августа 2010

У меня есть объект значения во Flex, который выглядит следующим образом:

[Bindable]

public class MyVO
{
    public var a:ArrayCollection;
    public var b:ArrayCollection;
    private var timeSort:Sort;

    public function ShiftVO(){
        timeSort = new Sort();
        timeSort.compareFunction = sortDates;
    }

public function get times():ArrayCollection{        
    var ac:ArrayCollection = new ArrayCollection(a.toArray().concat(b.toArray()));

    ac.sort = timeSort;
    ac.refresh();

    return ac;
}   

Речь идет о методе получения. Я отображаю данные геттера в таблице данных и всякий раз, когда я изменяю некоторые значения a или b, я также хочу обновить представление. Как мне этого добиться? В настоящее время представление не обновляется автоматически, мне нужно снова открыть представление, чтобы увидеть новые значения.

1 Ответ

3 голосов
/ 11 августа 2010

Когда вы создаете свойство [Bindable], Flex будет читать геттер всякий раз, когда вызывается его установщик (т. Е. Когда свойство обновляется);вы не объявили никакого установщика, и, следовательно, у Flex нет способа узнать, что значение свойства было обновлено.

Вы должны определить как метод установки, так и метод получения , чтобы использовать тег [Bindable] со свойством.Если вы определяете только метод установки, вы создаете свойство только для записи, которое не можете использовать в качестве источника выражения привязки данных.Если вы определяете только метод получения, вы создаете свойство только для чтения, которое вы можете использовать в качестве источника выражения привязки данных, не вставляя тег метаданных [Bindable].Это аналогично тому, как вы можете использовать переменную, определенную с помощью ключевого слова const, в качестве источника для выражения привязки данных.

Может быть, вы можете определить пустой сеттер и вызывать его всякий раз, когда обновляете a или b.

public function set times(ac:ArrayCollection):void { }

//somewhere else in the code:

a = someArrayCol;
/** 
 * this will invoke the setter which will in turn 
 * invoke the bindable getter and update the values 
 * */
times = null;

Только что заметил, что вы используете Bindable в классе вместосвойство: когда вы используете тег Bindable таким образом , он делает

пригодным для использования в качестве источника выражения привязки всех открытых свойств, которые вы определили как переменные, и всех открытых свойств, которыеопределяются с использованием как метода установки, так и метода получения .

Таким образом, если вы не определите метод установки, свойство не может быть привязано, даже если весь класс объявлен как привязываемый.

...