Позвольте мне попытаться объяснить это как можно лучше.
У меня есть компонент, содержащий сетку данных со следующим столбцом сетки данных
<mx:DataGridColumn dataField="email" headerText="Email Address">
<mx:itemRenderer>
<mx:Component>
<mx:VBox width="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off" horizontalAlign="center">
<mx:TextInput id="tiEmailAddress"
width="95%"
text="{data.email}"
invalid="{data.isNotValidEmail(event);}"
valid="{data.isValidEmail(event);}"/>
<mx:EmailValidator id="validatorEmailAddress"
source="{tiEmailAddress}"
property="text"
required="true"
requiredFieldError="Email address is required."/>
</mx:VBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
Вот смелость моего ценностного объекта:
[Bindable(event="contactChange")]
public class ContactVO extends EventDispatcher
{
private var _email:String = "default email";
public var selected:Boolean = false;
public var edited:Boolean = false;
public var isNew:Boolean = false;
public var isValid:Boolean = false;
public function ContactVO()
{ }
public function isNotValidEmail(e:Event):void
{
isValid = false;
email = e.target.text;
}
public function isValidEmail(e:Event):void
{
isValid = true;
email = e.target.text;
}
public function get email():String
{
return _email;
}
public function set email(value:String) : void
{
if (value != _email) {
_email = value;
edited = true;
}
dispatchEvent(new Event("contactChange", true));
}
}
Затем вернемся к компоненту, у меня есть это, которое вызывается в creationComplete
addEventListener("contactChange", processContactChange);
Через отладчик Flex я вижу оператор addEventListener
, вызываемый при создании компонента, я вижу событие, которое запускается из объекта значения при выполнении проверки и изменении значения, но processContactChange
никогда не вызывается , поэтому я предполагаю, что событие никогда не попадает в мой компонент.
Есть идеи, что я здесь ошибся? Спасибо!
[РЕШЕНИЕ]
Разговор с @Flextras, приведенный ниже, помог углубить мое понимание этого процесса и выяснить, где разрыв был в моем понимании. По сути, я изменил внутреннюю часть записи в столбце данных моего компонента на следующую:
<mx:TextInput id="tiEmailAddress"
width="95%"
text="{data.email}"
invalid="{data.isNotValidEmail(event);}"
valid="{data.isValidEmail(event);}"
creationComplete="{addListener(data)}"/>
<mx:Script>
<![CDATA[
private function addListener(data:Object):void
{
var eventDispatcher:EventDispatcher = data as EventDispatcher;
eventDispatcher.addEventListener("contactChange", outerDocument.processContactChange);
}
]]>
</mx:Script>
и удалил прослушиватель событий из моего creationComplete
метода