Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-11-2008, 12:53   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2006
Beiträge: 152
Model - UpdateEvent

Hallo zusammen,

steh grad - nicht vor einem Problem, aber einer Frage:

Mein Model beinhaltet ein Objekt "List", das als Container für einzelne Unterobjekte dient.
Der Controller greift im Model über getter auf diese List zu, also:

model.list.unterobjekt.id = 2;

Jetzt hab ich folgende Frage:
Auch der View greift ja über diesen getter auf das Model zu, also kann ich nicht in dieser Funktion ein "update"-Event dispatchen.

Jetzt hab ich 2 Möglichkeiten:
Entweder ich schreib für den View eine eigene Funktion, über die er auf das model zugreifen kann, oder ich dispatche den "update"-Event im model.list.unterobjekt und leite den über "list" ans Model weiter, was ich irgendwie eleganter finde.

Ich mein, ist jetzt nur eine Kleinigkeit, aber mich würds interessieren, wie ihr das machen würdet.

Danke!
grizu ist offline   Mit Zitat antworten
Alt 09-11-2008, 12:56   #2 (permalink)
undefined
 
Benutzerbild von mildesign
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 1.839
Zitat:
Der Controller greift im Model über getter auf diese List zu, also:
das ist ein setter du setzt/veränderst ja werte.

Edit:
gerade erst gesehen
Benutz du etwa ein Object für dein Datenmodel?
__________________
mfg Frank

Geändert von mildesign (09-11-2008 um 12:58 Uhr)
mildesign ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:00   #3 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Hi,
wie wäre sowas:
ActionScript:
  1. var list : XYZ = model.list;
  2.  
  3. list.unterobjekt.id = 2;
  4.  
  5. model.list = list;


Also du holst dir quasi eine Vorlage für deine neue Liste und setzt diese dann.
(Der erste Schritt dient nur zur Verdeutlichung. Natürlich ist das nur eine
Referenz auf das Objekt im Model und wird direkt verändert.)

Durch das erneute Setzen wird das Update ausgelöst.
sebastian ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:01   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.139
Ich würde dir raten, das analog zum DataBinding in Flex zu machen:
ActionScript:
  1. private var _value:Object;
  2.  
  3. [Bindable("valueChanged")]
  4. public function get value():Object {
  5.     return this._value;
  6. }
  7.  
  8. public function set value(value:Object):void {
  9.     if (this._value == value) {
  10.         return;
  11.     }
  12.     this._value = value;
  13.     this.dispatchEvent(new Event("valueChanged"));
  14. }
Dort, wo du dann auf Änderungen des Models (in dem obigen Beispiel nur Änderungen des Wertes value) bekommt das Model einen EventListener und in dem updatest du dann die View.
Omega Psi ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:03   #5 (permalink)
Neuer User
 
Registriert seit: Nov 2006
Beiträge: 152
@mildesign: was meinst du mit object?

@sebastian:
Danke, das is es!

Trotzdem, rein interessehalber: was haltet ihr von dieser Event-Weiterleitung?

edit: omega, genauso schauen meine setter und getter aus, das problem is nur, das eben view und controller über den getter zugreifen, weil sie nicht direkt das model updaten, sondern das list-Objekt im model.

Geändert von grizu (09-11-2008 um 13:05 Uhr)
grizu ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:05   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.139
Dein Model ist ein EventDispatcher, oder?
Omega Psi ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:06   #7 (permalink)
Neuer User
 
Registriert seit: Nov 2006
Beiträge: 152
jop
grizu ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:07   #8 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.139
Hole dir nur die Referenz auf die Liste und setze einen EventListener. Das sollte so passen. Wenn sich die Liste ändert, update die View... das passt schon so. Ich arbeite nicht anders.
Omega Psi ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:07   #9 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Psi: Siehe Grizus Anmerkung. Wenn im Object was verändert wird und es
nicht erneut gesetzt wird, kommt das Update Event nicht.

Finde übrigens this._property doppelt gemoppelt. Der Unterstrich ist ja
schon für die Eigenschaften und damit ist das this überflüssig.

lg
sebastian ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:08   #10 (permalink)
Neuer User
 
Registriert seit: Nov 2006
Beiträge: 152
meinst du jetzt die Variante von sebastian? oder den event in der liste dispatchen und ans model weiterleiten?

edit: ich steh auch auf this
grizu ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:16   #11 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.139
@Sebastian... oder den Underscore kriegst du einen Fehler, da Property und Accessor Sonst gleich benannt sind. Das muss so sein oder du benennst die Property ganz anders... was wenig Sinn macht.

Thema Update: dann liegt es aber an der Registrierung des EventListeners, nicht an der Implementierung des des Accessors.
Omega Psi ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:19   #12 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Zitat:
Zitat von Omega Psi Beitrag anzeigen
@Sebastian... oder den Underscore kriegst du einen Fehler, da Property und Accessor Sonst gleich benannt sind. Das muss so sein oder du benennst die Property ganz anders... was wenig Sinn macht.
Ohne den Underscore natürlich. Macht auch Sinn - dann am besten aber
einheitlich bei allen Eigenschaften.

Aber das "this" ist dann überflüssig.
sebastian ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:26   #13 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.139
this ist funktional immer überflüssig, wenn man nicht gerade eine Selbstreferenzierung durchführst. Für mich erhöht es aber die Lesbarkeit des Codes -> persönliche Preferenz.

Aber wie gesagt:
ActionScript:
  1. private var value:Object;
  2.  
  3. [Bindable("valueChanged")]
  4. public function get value():Object {
  5.     return this.value;
  6. }
  7.  
  8. public function set value(value:Object):void {
  9.     if (this.value == value) {
  10.         return;
  11.     }
  12.     this.value = value;
  13.     this.dispatchEvent(new Event("valueChanged"));
  14. }
Wird nicht kompilieren: doppelter Verweis auf Value + Endlosschleife.

Kann auch sein sein, dass ich dich falsch verstanden hatte.
Omega Psi ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:29   #14 (permalink)
Neuer User
 
Registriert seit: Nov 2006
Beiträge: 152
um jetzt nochmal zu fragen...

model.list im controller updaten, oder event aus der list ans model dispatchen?
grizu ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:32   #15 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Ja, "will" ja das du genau das andere weglässt. Also Unterstriche beibehalten
und this weglassen.

this ist z.B. wichtig, wenn du gleichnamige lokale Variablen hast.

Aber wenn man sich daran hält, dass man bei allen(!) Eigenschaften den
Unterstrich nutzt, dann hat man eine schöne Trennung zu den lokalen
Variablen und auch keine Probleme bei Settern/Gettern.

In deinem Fall war das "this" ja nur zur Verdeutlichung, dass du auf eine
Eigenschaft zugreifst. Aber wenn diese Funktion der Unterstrich übernimmt,
dann kannst du das this auch weglassen.

(Habe es früher auch anders gemacht, aber mittlerweile finde ich es
so deutlich besser.)

Zurück zu Grizu, ist sein Thread, sorry
sebastian ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
listener, mvc, oop, value object

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 12:00 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele