Beiträge: 21 Wohnort: Vilsheim Registriert: Jan 2010
Newbie Frage zu Events bei TitleWindow
Hallo zusammen,
ich (Newbie), hab mal ne grundsätzliche Frage zum Event-Modell von Flex - im speziellen zum Umgang mit TitleWindow. In meiner Anwendung möchte und kann ich nicht so gerne mit ViewStacks arbeiten, weswegen ich beispielsweise für die Neuanlage oder auch bei Änderungen von Datensätzen auf TitleWindows zurückgegriffen habe.
Nun möchte ich beispielsweise dass ein Datagrid in der Hauptanwendung automatisch aktualisiert wird, sobald ich in dem TitleWindow (dieses habe ich als Komponente ausgelagert) auf meinen Button Save clicke und ein Datensatz in eine MySQL-Tabelle eingetragen wird (das klappt auch). Mein Datagrid wird initial über ein CreationComplete Ereignis mit allen Datensätzen aus der MySQL-Tabelle gefüllt.
Wie kann ich nun von einem TitleWindow auf meine Applikation zugreifen - geht das irgendwie mit parent und gibt es sowas wie einen refresh oder reload?? Hoffe ihr könnt damit was anfangen und mir ein wenig weiterhelfen. Sag schon mal danke im Voraus.
Wolfgang
Beiträge: 21 Wohnort: Vilsheim Registriert: Jan 2010
Themenautor/in
Ich sag schon mal danke für deine Hilfe. Ist vielleicht eine doofe Frage - aber ganz verstanden habe ich es noch nicht:
Dass ich den Event von dem TitleWindow feuere leuchtet mir noch ein, aber unklar ist mir wieso ich den EventListener auch an das TitleWindow hängen muss. Vielleicht habe ich meine Frage ja missverständlich formuliert, aber müsste nicht in der Main-Application der EventListener - bspw. an das DataGrid in der Main-Application - gehängt werden?
Kann aber auch leicht sein dass ich einfach zu doof bin um das zu kapieren?
Beiträge: 5175 Wohnort: Bernau (bei
Berlin) Registriert: Nov 2002
Einen Listener hängt man an das Objekt, welches das Event auch auslöst.
Eine Ausnahme bildet die Möglichkeit ein Event bubbeln zu lassen. Dann wird das Event in der Hierachie der Anzeigeliste, in der das Objekt liegt, weiter nach oben durchgereicht.
Dazu muss die bubbles-Eigenschaft auf true:
ActionScript:
1
this.dispatchEvent("datenWurdenVeraendert",true);
Dann kannst du bspw. in der Application einen Listener hinzufügen:
Beiträge: 21 Wohnort: Vilsheim Registriert: Jan 2010
Themenautor/in
Vielen Dank, das mit dem bubblen hab ich verstanden und so wie es aussieht gibt es wohl verschiedene Wege zum Ziel.
Mittlerweile hab ich alles in meine Main-Applikation gelegt und einen Teilerfolg erzielt (freu ;-)) - aber irgendwie wird mein DataGrid nur ab dem zweiten Click oder unregelmäßig aktualisiert, aber definitiv nicht beim ersten click auf den Save Button. Woran kann das nun liegen? Hat das etwa mit meinem RemoteObject zu tun?
So sieht der Code in der Main Applikation aus.
ActionScript:
1 2 3 4 5 6 7 8 9
private function showPopUp() : void {
var WinInsert:TitleWindow = TitleWindow(PopUpManager.createPopUp(this, Insert , true));
PopUpManager.centerPopUp(WinInsert);
WinInsert["SaveButton"].addEventListener("click", listener);
}
private function listener( event:Event ):void{
myRemote.getData();
}
Beiträge: 21 Wohnort: Vilsheim Registriert: Jan 2010
Themenautor/in
Kann mein Problem mit einem Cache zusammenhängen?
Bei meinem deleteHandler funktioniert es, d.h. das DataGrid wird nach jeder Löschung eines Datensatzes sofort aktualisiert. Der einzige Unterschied besteht darin, dass das Löschen eines Records nicht über ein TitleWindow erfolgt.
private function deleteItem():void {
if (myGrid.selectedItem){
Alert.yesLabel = "Ja";
Alert.noLabel = "Nein";
Alert.show("Are you sure you want to delete the selected record?",
"Confirm Delete", 3, this, deleteHandler);
}
}
Beiträge: 6806 Wohnort: München Registriert: Jan 2002
- Hast Du mal debuggt ob die Methode auch aufgerufen wird?
- Kommen die richtigen Daten zurück, werden aber nicht im DataGrid aktualisiert?
- Arbeitest Du mit einer ArrayCollection? Versuch mal ein refresh();Flex Freelancer || Twitter || XING || Adobe Flex User Group München
Beiträge: 21 Wohnort: Vilsheim Registriert: Jan 2010
Themenautor/in
Hallo Sebastian,
ja, ich habe geprüft ob ich in die Schleife reinlaufe - mit einem Alert Fenster - da rausch ich jedesmal rein. Es kommen auch die richtigen Daten zurück, aber es ist wie du hinterfrägst, das DataGrid wird nicht aktualisiert - zumindest nicht immer. Manchmal krieg ich nachdem ich einen Datensatz gespeichert habe keine Änderung im Datagrid zu sehen, speichere ich dann erneut einen neuen Datensatz, dann werden manchmal auch gleich die zwei neuen Datensätze angezeigt. Dabei lasse ich das TitleWindow, über welches ich den Insert in die DB vornehme, geöffnet und erkenne im Hintergrund das das DataGrid aktualisiert wird - oder eben nicht.
Nein, ich arbeite nicht mit einer ArrayCollection - ich verwende AMFPHP und arbeite mit einem RemoteObject. Als DataProvider für das Datagrid habe ich das stehen:
ActionScript:
1
dataProvider="{myRemote.getData.lastResult}"
Worauf und wie sollte ich den refresh() machen?? Was ich mal probiert habe ist ein invalidateDisplayList() auf das Datagrid, aber da hat sich auch nichts verändert.
Ich hab noch einen refresh() auf den dataProvider des DataGrid gemacht - keine Änderung.
hi,
ich würde das lastResult von myRemote.getData in eine ArrayCollection speichern. und dem grid als dataProvider diese collection übergeben... dann kannst du auch auf die collection refresh() ausführen...
ActionScript:
1 2 3 4 5
[Bindable]
private var collection : ArrayCollection;
<mx:DataGrid dataProvider="{this.collection}"/>
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
Beiträge: 21 Wohnort: Vilsheim Registriert: Jan 2010
Themenautor/in
Hi,
so, nun hab ich das auch probiert und das Ergebnis des RemoteObjects in eine ArrayCollection übernommen. Das Verhalten ist leider unverändert geblieben, auch nachdem ich den dataProvider refreshed habe. Ratlosigkeit wohin mein Auge reicht ....
Mein RemoteObject:
27.08.10, 17:02 The first public build of Flex 4.5, aka Hero is out: http://bit.ly/cIS7TZ Contains new Spark DataGrid, Form, Image, -size-report (@renaun)