Вы сказали:
По завершении создания мой родительский компонент выполняет функцию «init», которая просто устанавливает общедоступные привязываемые переменные в дочерних компонентах. Я бы хотел, чтобы дочерние компоненты наблюдали за этими переменными и после установки использовали их.
Он нарушает инкапсуляцию, пытаясь получить доступ дочернего компонента к родительскому. Родители могут получить доступ, дети, но дети никогда не должны иметь доступ к родителям. Тем не менее, любой данный компонент должен знать, когда его значения изменяются, и обновляться соответствующим образом. Использование свойств get / set и компонента LifeCycle Flex является правильным способом сделать это.
Когда вы делаете компонент Bindable, это означает, что его можно использовать как источник привязки данных. Мне кажется, что вы пытаетесь использовать упомянутые свойства в качестве цели для привязки данных и пытаетесь обновить свой компонент.
Если я понимаю, что вы ищете, я бы вообще не использовал ChangeWatcher. Просто разверните свое пользовательское свойство в свойство get / set и внесите свои изменения в метод set свойства или, возможно, в commitProperties, используя флаг.
Примерно так:
private var _user : Object;
[Bindable]
public function get user():Object{
return this._user;
}
public function set user(value:Object):void{
this._user = value;
Alert.show(value);
}
Или даже лучше:
protected var userChanged : Boolean = false;
private var _user : Object;
[Bindable]
public function get user():Object{
return this._user;
}
public function set user(value:Object):void{
this._user = value;
this.inalidateProperties()
userChanged = true;
}
public function commitProperties():void{
if(userChanged == true){
Alert.show(value);
userChanged = false;
}
}