2010-08-20 3 views
0

Я хотел бы добавить производное свойство изгибаться:зависимости в привязке данных

private var a:int; 
private var b:int; 
[Bindable] 
public function get derived():int 
{ 
    return a+b; 
} 

Однако полученный не будет обновляться при изменении а или б. Есть ли лучший (более быстрый) способ сделать производное обновление, чем давать методы a и b setter, которые недействительны?

Редактировать: добавить ключевое слово "get". Надеюсь, теперь это имеет больше смысла.

+0

К сожалению, я вижу, я забыл "получить". Позвольте мне изменить это. –

ответ

2

Ваш код не создает свойство, он создает метод. Методы не могут быть Bindable, только свойствами. Этот подход должен сработать для вас:

private var _a:int; 
public function get a():int{ 
return _a 
} 
public function set a(value:int):void{ 
    _a = a; 
    dispatchEvent(new Event('derivedChanged')); 
} 
private var _b:int; 
public function get b():int{ 
return _b 
} 
public function set b(value:int):void{ 
    _b = b; 
    dispatchEvent(new Event('derivedChanged')); 
} 

[Bindable(event="derivedChanged")] 
public function get derived():int 
{ 
    return a+b; 
} 

Я написал код n в браузере; поэтому возможны незначительные синтаксические ошибки.

+0

Правильно, это точно мой текущий код. Я хотел знать, могу ли я избежать добавления методов get и set для a и b. –

+0

Это не код, который вы опубликовали. ;) Чтобы инициировать привязку к свойствам только для чтения, что-то должно отправить событие привязки. Это не должны быть заданные методы для a и b, но это наиболее логичное место. – JeffryHouser

1

Вы можете использовать [Bindable(event="propertyChanged")] в своей производной функции.

Вы также должны сделать свою производную функцию геттером.

Я должен работать, потому что flex использует PropertyChangeEvent.PROPERTY_CHANGE для привязки переменных, автоматически создавая геттеры и сеттеры и отправляя PropertyChangeEvent. Изменение либо a, либо b автоматически аннулирует результат derived.

0

Я чувствовал, что это была общая проблема, поэтому я написал код, чтобы помочь ему. Вы можете добавить, что зависит от вашего получателя в метаданных Bindable. Итак:

[Bindable (событие = "derivedChanged", dependentProperty = "а")] [Bindable (событие = "derivedChanged", dependentProperty = "б")] общественные функции получить получены(): Int { return a + b; }

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

Проверьте это: http://frishy.blogspot.com/2011/06/binding-dependencies.html

-Ryan

Смежные вопросы