Подтвердить что ты не робот

Связывание с получателем только для чтения в AS3

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

[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);
}

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

Связывание данных работает с эффективным свойством FromDateJulian; любые обновления работают нормально и все правильно сообщают. Но при привязке к свойству effectiveFromDate (только для getter) я получаю предупреждение от компилятора:

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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

Сделать readonly getter Bindable и отправить соответствующее событие из исходного метода setter.

[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);
}