Привязка к получателю только для чтения в AS3 - PullRequest
17 голосов
/ 15 сентября 2009

Рассмотрим следующий код:

[Bindable(event="ReportHeaderVO_effectiveFromDateJulian_updated")]
public function set effectiveFromDateJulian ( value:Number ) : void
{
    _effectiveFromDateJulian = value;
    dispatchEvent( new FlexEvent("ReportHeaderVO_effectiveFromDateJulian_updated") );
}

public function get effectiveFromDateJulian () : Number
{
    return _effectiveFromDateJulian;
}

public function get effectiveFromDate () : Date
{
    return DateUtil.convertJDEJulianToDate(_effectiveFromDateJulian);
}

Существуют установщик и получатель дляffectiveFromDateJulian, который является числовым представлением даты. Я предоставил отдельный метод получения, который извлекает то же значение, только преобразованное в правильную дату. Это только метод получения и он полагается на метод определения числового свойства для получения своих данных; таким образом, свойствоffectiveFromDate эффективно доступно только для чтения.

Привязка данных работает со свойствомffectiveFromDateJulian; любые обновления работают нормально и все правильно уведомляют. Но при привязке к свойствуffectiveFromDate (только для getter) компилятор получает предупреждение:

warning: unable to bind to property 'effectiveToDate' on class 'com.vo::ReportHeaderVO'

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

Это простой пример, вы можете представить себе свойство, доступное только для чтения, которое зависит от нескольких работающих сеттеров, и когда любой из этих сеттеров будет обновлен, свойство только для чтения также должно будет инициировать событие propertyChanged. Есть идеи? Пожалуйста, дайте мне знать, если мне нужно что-то уточнить.

Обновление: Из документации Adobe здесь:

http://livedocs.adobe.com/flex/3/html/help.html?content=databinding_8.html

Использование свойств только для чтения в качестве источник для привязки данных

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

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

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

1 Ответ

16 голосов
/ 21 сентября 2009

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

[Bindable(event="ReportHeaderVO_effectiveFromDateJulian_updated")]
public function set effectiveFromDateJulian ( value:Number ) : void
{
    _effectiveFromDateJulian = value;
    dispatchEvent( new FlexEvent("ReportHeaderVO_effectiveFromDateJulian_updated") );
    dispatchEvent( new FlexEvent("ReportHeaderVO_effectiveFromDate_updated") );
}
[Bindable(event="ReportHeaderVO_effectiveFromDate_updated")]
public function get effectiveFromDate (date:Date) : Date
{
    return DateUtil.convertJDEJulianToDate(_effectiveFromDateJulian);
}
...