2011-01-10 11 views
2

Ich habe eine thread eingereicht, die (nach dem Lesen wieder) völlig falsch formuliert wurde. Das ist genau das, was ich wissen wollte:Reflect Eigenschaft Änderung von einer Ansicht in eine andere Ansicht mit einer Klasse als Zwischenprodukt

In einer Flex-Anwendung mit MATE nehmen wir an, dass View.mxml mit einer Eigenschaft namens ViewProp und einer Klasse namens ClassManager mit einer Eigenschaft ClassProp aufgerufen wird. Nehmen wir an, wir haben eine zweite View namens SecondView.mxml mit einer Eigenschaft SecondProp.

Ist es möglich, irgendwie Folgendes zu definieren: immer wenn der ViewProp ändert (in View.mxml) der ClassProp wird auch in ClassManager geändert, die wiederum ihre Änderungen in Secondview.mxml in der Eigenschaft SecondProp ?!

Ich hoffe diesmal richtig beschrieben zu haben!

Vielen Dank im Voraus

+0

Sie sollten in Ihrer Frage erwähnen, dass Ihre Verwendung Mate – Ryan

+0

Vielen Dank für die Erwähnung! Ich werde bearbeiten, um dies zu reflektieren (zumindest habe ich es richtig markiert !!! :))) –

Antwort

0

Dies ist ein bisschen anders als Ihre erste Frage.

Ansichtsklassen MÜSSEN nicht direkt auf die Modellklassen zugreifen. Aus diesem Grund muss die View-Klasse ein Ereignis zum Ändern der Modellklasse senden.

1.) Sie müssen eine Art neues 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

dispatchEvent(new ViewPropIsChangedEvent(ViewPropIsChangedEvent.SET_NEW_VALUE, theNewValue)) 

3.) im EventMap müssen Sie das Ereignis

</EventHandlers type="{ViewPropIsChangedEvent.SET_NEW_VALUE}"> 
    <PropertySetter generator="{ClassManager}" 
        targetKey="ClassProp" 
        source="{event.value}"/> 
</EventHandlers> 

4.) in der ModelMap behandeln Sie bereits die Secondview.SecondProp zu Cla binden müssen, ssManager.ClassProp

<Injectors target="{Secondview}"> 
    <PropertyInjector targetKey="SecondProp" 
        source="{ClassManager}" 
        sourceKey="ClassProp"/> 
</Injectors> 
+0

Also wenn richtig verstanden mit zwei Injektoren wäre das falsch? Ja? Ist das überhaupt machbar? Was mich verdächtig macht, ist folgendes: Mit Map-Dateien trennt man (oder hängt es voneinander ab, wie man es sieht) Eigenschaften voneinander (für mich bedeutet es, dass sie sich nicht voneinander bewusst sind). Habe ich das richtig verstanden? –

+0

Es gibt mehrere Probleme beim Binden einer Ansichtskomponente an andere Ansichtskomponenten. Wenn Sie beispielsweise versuchen, die Eigenschaft der Klasse zu injizieren, die derzeit nicht erstellt wird (wenn Secondview zuerst erstellt wird, versucht Mate, View.ViewProp an Secondview.econdProp zu binden, View wird jedoch null sein). Das Ändern der Model-Klasse direkt durch einige View ist gegen MVC-Prinzipien. – fiction

+0

Über 'zwei Injektoren' - Wenn Sie einen Injektor von der View to Model-Klasse haben: Erstens, dies ist gegen MVC-Prinzipien, zweitens funktioniert dies nicht, wenn die Ansicht null ist und eine mögliche Entbindung folgen wird. – fiction

0

Wie wäre es auf diese Weise:

Wenn die ViewProp oder ClassProp Änderung dieser Eigenschaft Versand ein Ereignis und ein Eventlistener in Secondview.mxml hinzugefügt wird, um die Eigenschaft SecondProp zu ändern.

+0

Würde dies nicht gegen die Prinzipien der Verwendung von MATE verstoßen? Sollte nicht alles zentral gehalten werden? (in der Kartendatei)? Frage nur ... Ich bin neu in Flex und MATE –

+0

Sorry, ich lese nicht die erste Frage. – michael