Reflektieren Eigenschaft Wechsel von einer Ansicht in einer anderen Ansicht eine Klasse als Zwischen mit
-
09-10-2019 - |
Frage
Ich lege habe eine Thread die so formuliert war (nach erneutem Lesen) völlig falsch. Das ist eigentlich das, was ich wissen wollte:
In einer Flex-Anwendung mit MATE nehme an, wir haben eine Ansicht namens View.mxml mit einer Eigenschaft namens ViewProp und eine Klasse namens ClassManager mit einer Eigenschaft ClassProp. Angenommen, wir haben eine andere Ansicht namens SecondView.mxml mit einer Eigenschaft SecondProp.
Ist es möglich, irgendwie folgendes zu definieren: wann immer die ViewProp ändert (in View.mxml) der ClassProp auch in ClassManager geändert wird, was wiederum ihre Veränderungen in Secondview.mxml in Immobilien spiegelt SecondProp?!
Ich hoffe, dieses Mal ist es richtig beschrieben haben!
Vielen Dank im Voraus
Lösung
Dies ist ein bisschen anders als die erste Frage.
Ansicht Klassen müssen Zugriff nicht die Modellklassen direkt, und aus diesem Grunde die View-Klasse ein -Ereignis muß die Modellklasse zu ändern.
1.) Sie müssen eine Art neuen Ereignis definieren
public class ViewPropIsChangedEvent extends Event
{
public static const SET_NEW_VALUE:String = "theNewValue";
private var _value:Object;
public ViewPropIsChangedEvent(type:String, value:Object, bubbling:Boolean=true, cancelable:Boolean=false)
{
super(type,bubbling,cancelable);
_value = value;
}
public function get value():Object
{
return _value;
}
}
2.) Wenn Sie die ViewProp in View.mxml geändert haben, müssen Sie ein Ereignis
VersanddispatchEvent(new ViewPropIsChangedEvent(ViewPropIsChangedEvent.SET_NEW_VALUE, theNewValue))
3). Im EventMap Sie das Ereignis
handhaben müssen</EventHandlers type="{ViewPropIsChangedEvent.SET_NEW_VALUE}">
<PropertySetter generator="{ClassManager}"
targetKey="ClassProp"
source="{event.value}"/>
</EventHandlers>
4). In der ModelMap müssen Sie bereits binden die Secondview.SecondProp zu ClassManager.ClassProp
<Injectors target="{Secondview}">
<PropertyInjector targetKey="SecondProp"
source="{ClassManager}"
sourceKey="ClassProp"/>
</Injectors>
Andere Tipps
How about in this way:
When the ViewProp or ClassProp change, this property dispatch an event and an eventlistener is added in Secondview.mxml to modify the property SecondProp.