Riflettere modifica della proprietà da una vista all'altra Vista utilizzando una classe come intermedio
-
09-10-2019 - |
Domanda
Ho fatto presentare una filo che era (dopo aver letto di nuovo) totalmente sbagliato formulati. Questo è in realtà quello che volevo sapere:
In un'applicazione Flex utilizza MATE supponiamo di avere una visione chiamato View.mxml con una proprietà chiamata ViewProp e una classe chiamata ClassManager con un ClassProp proprietà. Supponiamo di avere un altro vista chiamata SecondView.mxml con una proprietà SecondProp.
E 'possibile definire in qualche modo seguente: ogni volta che il ViewProp cambia (in View.mxml) il ClassProp è cambiato anche in ClassManager, che a sua volta riflette le sue variazioni di Secondview.mxml in immobili SecondProp?!
Spero che questo momento di aver descritto in modo corretto!
Grazie in anticipo
Soluzione
Questo è un po 'diverso dalla tua prima domanda.
Visualizza le classi non devono accedere al classi del modello direttamente, e per questo la classe vista deve inviare un evento per modificare la classe del modello.
1.) È necessario definire una sorta di nuovo evento
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). Quando è stata modificata la ViewProp in View.mxml, è necessario inviare un evento
dispatchEvent(new ViewPropIsChangedEvent(ViewPropIsChangedEvent.SET_NEW_VALUE, theNewValue))
3). Nel EventMap è necessario gestire l'evento
</EventHandlers type="{ViewPropIsChangedEvent.SET_NEW_VALUE}">
<PropertySetter generator="{ClassManager}"
targetKey="ClassProp"
source="{event.value}"/>
</EventHandlers>
4). Nel ModelMap si deve già legano il Secondview.SecondProp a ClassManager.ClassProp
<Injectors target="{Secondview}">
<PropertyInjector targetKey="SecondProp"
source="{ClassManager}"
sourceKey="ClassProp"/>
</Injectors>
Altri suggerimenti
Come su in questo modo:
Quando il ViewProp o il cambiamento ClassProp, questa struttura a inviare un evento e viene aggiunto un EventListener in Secondview.mxml per modificare la proprietà SecondProp.