Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07-04-2006, 11:38   #1 (permalink)
Neuer User
 
Registriert seit: Oct 2003
Beiträge: 124
Question MVC-Pattern und Listener - Verständnisfrage

Moin zusammen,

ich habe mal eine Frage zu Listenern in Bezug auf das Model-View-Controller-Pattern.

Ich habe Objekte, die aus einer View heraus erstellt werden, ist leider so weil ich dort die MovieClip-Klasse brauche und ich ja leider nicht von mehreren Klassen vererben kann. Diese Objekte sollen jetzt sich jetzt beim Klicken ändern, was auch wunderbar funktioniert. Nur wie bekomme ich diese Änderung dem Controller bzw. dem Model beigebracht? Im Buch von Moock wird das ja mit Listenern gemacht, aber damit komme ich irgendwie nicht zurecht.

Ich habe also einen MC, den klicke ich, der ändert seinen Status und soll es irgendwie dem Controller/Model erzählen. Nur wie?

Muss der Listener zum MC? Und gebe ich dann die Funktion aus dem Controller an, die aufgerufen werden soll? Und kann ich hier noch Parameter übergeben?

Oder gibt es vielleicht eine viel elegantere Lösung?

Danke schonmal für eure Hilfe, ihr könntet mir das Wochenende retten
Denyo256 ist offline   Mit Zitat antworten
Alt 07-04-2006, 18:14   #2 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg
Beiträge: 4.385
Wenn ich das richtig verstanden habe, würden deine MCs nur die View benachrichtigen, und der Controller ist bei der View als Listener angemeldet.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 07-04-2006, 21:29   #3 (permalink)
JoH
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 99
Du könntest z.B. ein Interface IController schreiben mit einer Methode wie z.B. event(view, event, args) die dein Controller bzw. alle Controller implementieren.

Dein View muss dann natürlich seinen Controller als Typ IController kapseln.
private var controller : IController

Und dann kannst Du im View sowas machen wie:
Code:
onPress = Delegate.create(this, pressed);

private function pressed() : Void {
    controller.event(this, 'pressed', irgendwas);
}
JoH ist offline   Mit Zitat antworten
Alt 10-04-2006, 09:08   #4 (permalink)
Neuer User
 
Registriert seit: Oct 2003
Beiträge: 124
Zitat:
Zitat von Janoscharlipp
Wenn ich das richtig verstanden habe, würden deine MCs nur die View benachrichtigen, und der Controller ist bei der View als Listener angemeldet.
Vom Prinzip her ist das genau richtig, das ist auch kein Problem, ich rufe aus der Klasse, welche die MCs erzeugt, eine Methode der View auf, welche dann den Status ändert.

Die einzelnen MCs bzw. Objekte mit den MCs liegen in einem Array, wenn sich also das Model (das Array des Models) ändert, soll sich der Zustand des MCs an dieser Stelle im Objekt-Array der View ändern und umgekehrt.

Jetzt muss ich nur mal schauen, wie der Controller Bescheid bekommt, ich werde mal ein wenig hier nach den Delegaten stöbern, vielleicht ist das ja die richtige Lösung.
Denyo256 ist offline   Mit Zitat antworten
Alt 10-04-2006, 09:10   #5 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg
Beiträge: 4.385
Naja, generell ist es ja der Controller, der die View erstellt, oder zumindest initialisiert. An diesem Punkt kann er sich ja auch noch als Listener anmelden.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 10-04-2006, 11:52   #6 (permalink)
Neuer User
 
Registriert seit: Oct 2003
Beiträge: 124
Also ich hab mir jetzt mal ein paar kleinere Beispiele von MVC hier im Forum angeschaut und ich muss sagen, was der Moock in seinem Buch da macht, das ist irgendwie sehr verwirrend, wenn man die anderen Beispiele so anschaut.

Ich denke, dann sollte ich auch die Sache so langsam verstanden haben und ich denke, ich werde mir noch gründlich überlegen, ob ich weiter vorhabe die Sache nach den Vorschlägen von Moock zu realisieren.
Denyo256 ist offline   Mit Zitat antworten
Alt 11-04-2006, 17:17   #7 (permalink)
l2l|c4o
 
Benutzerbild von Sir Freako
 
Registriert seit: Nov 2005
Ort: düstere Grotte im Süden
Beiträge: 1.268
Lightbulb

Hallo ,

durch einen Multible Listener kann man ganz einfach
scope auf eine Variable setzen

zB. ein Textfeld mit einer Variablen

vorallem onChanged wird nur aufgerufen wenn sich das Textfeld aka die Variable
verändert sonst nicht !
es wird nur dann ausgewertet wenn sich etwas verändert


Code:
//>>-----------Start------SetupMultipleListener-------------------------------
 
Textfield.prototype.setText = function(str) { 
this.text = str;
this.broadcastMessage("onChanged");
 };
_level0.a.text = "";
myObj = new Object(); 
myObj.onChanged = function() {
trace("mybox's been changed"); 
};
 _level0.a.onChanged = function() {
 switch (_level0.a.text) {
     case "Hello" :   
  trace("case 1 tested true");
     break;
     case "hi" :     
        trace("case 2 tested true");     
     break; 
    case "Hi" :     
        trace("case 3 tested true");    
     break;
    default : 
    trace("no case tested true"); 
   }
}
__________________
-------------------------------------
LOVE 2 LIVE | CHAOS 4 ORDER

Geändert von Sir Freako (11-04-2006 um 19:17 Uhr)
Sir Freako ist gerade online   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:10 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2014 Marc Thiele