Zurück   Flashforum > Flex und AIR > Flex programmieren

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-05-2011, 10:12   #1 (permalink)
Neuer User
 
Registriert seit: May 2011
Beiträge: 11
Question Flex 4 Panel Skinning | Elemente ansprechen

hallo zusammen,
ich habe die suchfunktion bereits genutzt, konnte allerdings nur einen passenden beitrag finden, welche allerdings keine praktikable lösung beinhaltet.

zu meinem problem:
ich möchte ein spark panel für meine bedüfnisse skinnen, dieser skin beinhaltet unter anderem einen button.
wie ist es mir möglich, nachdem das panel mit meinem skin intialisiert wurde, das clickevent des buttons einer funktion in meiner mainapplikation zu zuweisen?
vergebe ich eine id für den button, so kann ich auf diese variable nicht zugreifen.

vielen dank im vorraus
adoublso
aDoubleSo ist offline   Mit Zitat antworten
Alt 16-05-2011, 10:19   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Zitat:
Zitat von aDoubleSo Beitrag anzeigen
wie ist es mir möglich, nachdem das panel mit meinem skin intialisiert wurde, das clickevent des buttons einer funktion in meiner mainapplikation zu zuweisen?
Was hat denn ein Klick-Event mit dem Skin zu tun

Hast Du in dem MXML bzw. der Klasse, in der der Button liegt, eine Referenz auf die Main? Wenn ja benutz doch einfach diese.

Generell ist es aber nicht so geschickt untergeordnete Elemente auf übergeordnete zugreifen zu lassen. Besser wäre es beim Button-Klick eine eigenes (bubbleing) Event zu erzeugen, auf das in der Main ein Listener registriert wurde, der dann die weiteren Aktionen ausführt...
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 16-05-2011, 10:32   #3 (permalink)
Neuer User
 
Registriert seit: May 2011
Beiträge: 11
erstmal danke für deine antwort!
das klick event hat soviel mit dem skin zu tun, dass der button im skin gesetzt wurde, also garnichts
ich möchte nichts anderes, als den im skinn definierten button, in der applikation nutzen zu können und dazu brauche ich events!

mit FlexGlobals.topLevelApplication habe ich jederzeit eine referenz in die main, oder sehe ich das falsch?

wäre es "richtig", im style das event zu definieren und dann das bubbling event in der main zu fangen? ich war der meinung es wäre sinnvoll, keine logik in den skin zu packen...

danke
aDoubleSo ist offline   Mit Zitat antworten
Alt 16-05-2011, 10:38   #4 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Zitat:
Zitat von aDoubleSo Beitrag anzeigen
wäre es "richtig", im style das event zu definieren und dann das bubbling event in der main zu fangen? ich war der meinung es wäre sinnvoll, keine logik in den skin zu packen...
Das ist auch so - weshalb ich nicht verstehe, warum Du dort irgendwelche konkreten Buttons und Klick-Events erzeugen möchtest? Oder meinst Du mit "Skin" eine komplette Komponente?

Ich bin was Flex angeht aber selbst noch ziemlich grün hinter den Ohren. Vielleicht hat ja eine der hießigen Flex-Pros was dazu zu sagen?!
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (16-05-2011 um 10:40 Uhr)
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 16-05-2011, 10:49   #5 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.146
Das Panel muss einen SkinPart besitzen, der required sein muss. Als MouseEvent bubbled das Event automatisch, besser ist es aber, einen Handler auf den Event in der HostComponent zu setzen und dann einen CloseEvent.CLOSE zu dispatchen. Der kann bubblen, je nach Architekturkonzept kann oder muss es es gar.

Ich würde dir empfehlen, dir einen Mediator zu bauen, der das PopUp (?) steuert.
Omega Psi ist offline   Mit Zitat antworten
Alt 16-05-2011, 11:05   #6 (permalink)
Neuer User
 
Registriert seit: May 2011
Beiträge: 11
@ martin:
ich möchte meinen button im skin definieren, d.h. nicht, dass ich in irgend einer weise logik in die skindefinition packe. ist für mich absolut logisch, denn wenn ich zb einen button im panel haben möchte, mit welchem sich das panel schließt, so soll dieser button für jedes panel zur verfügung stehen und deshalb ist er teil meines skins.

@psi:
erstmal vielen dank, ich setze mich mal mit deinem ratschlag auseinander und komme dann gegebenfalls auf dich zurück

danke euch!
aDoubleSo ist offline   Mit Zitat antworten
Alt 16-05-2011, 11:15   #7 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.146
Yupp, mach das.
Omega Psi ist offline   Mit Zitat antworten
Alt 16-05-2011, 14:38   #8 (permalink)
Neuer User
 
Registriert seit: May 2011
Beiträge: 11
ich habe das clickevent des buttons in der skinklasse folgendermaßen gesetzt:
Code:
<s:Button includeIn="normal" y="12" label="expand / close" right="50" click="this.dispatchEvent(new Event('expandPanel',true));"/>
in meiner custompanelklasse welche den skin benutzt habe ich dann nurnoch den passenden eventlistener angehängt:
Code:
this.addEventListener('expandPanel', expandPanel);
jetzt habe ich prinzipiell das was ich wollte...
ich glaube nur, dass dies nicht die feine englische ist!?

Geändert von aDoubleSo (16-05-2011 um 15:05 Uhr)
aDoubleSo ist offline   Mit Zitat antworten
Alt 17-05-2011, 06:51   #9 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.146
Ja, das ist falsch, denn die Skin wird das Event dispatchen, nicht die HostComponent. So ist es besser:
Code:
package fs.components
{
	import flash.events.MouseEvent;

	import spark.components.Panel;
	import spark.components.supportClasses.ButtonBase;

	[SkinState("closed")]

	[SkinState("disabled")]

	[SkinState("normal")]

	[SkinState("closedWithControlBar")]

	[SkinState("disabledWithControlBar")]

	[SkinState("normalWithControlBar")]

	[Event(name="close", type="mx.events.CloseEvent")]

	public class Panel extends spark.components.Panel
	{

		[SkinPart(required="true")]
		public var closeButton:ButtonBase;

		private var _closed:Boolean;

		public function get closed():Boolean
		{
			return _closed;
		}

		public function set closed(value:Boolean):void
		{
			_closed = value;

			if (_closed)
			{
				dispatchEvent(new CloseEvent(CloseEvent.CLOSE));
			}
			invalidateSkinState();
		}

		public function Panel()
		{
		}

		private function closeButton_clickHandler(event:MouseEvent):void
		{
			closed = !closed;
		}

		override protected function getCurrentSkinState():String
		{
			if (closed)
			{
				return "closed";
			}

			return super.getCurrentSkinState();
		}

		override protected function partAdded(partName:String, instance:Object):void
		{
			super.partAdded(partName, instance);

			if (instance == closeButton)
			{
				closeButton.addEventListener(MouseEvent.CLICK, closeButton_clickHandler);
			}
		}

		override protected function partRemoved(partName:String, instance:Object):void
		{
			super.partRemoved(partName, instance);

			if (instance == closeButton)
			{
				closeButton.removeEventListener(MouseEvent.CLICK, closeButton_clickHandler);
			}
		}
	}
}

Geändert von Omega Psi (17-05-2011 um 06:54 Uhr)
Omega Psi ist offline   Mit Zitat antworten
Alt 29-06-2011, 12:08   #10 (permalink)
Neuer User
 
Registriert seit: May 2011
Beiträge: 11
Tausend Dank Psi!!
aDoubleSo ist offline   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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Flex Skinning Komponente wird nicht angezeigt. ohneschuhe Komponenten und SmartClips 1 02-11-2009 10:12
Flex 4 + Skinning Nico B. Flex programmieren 5 16-09-2009 22:07
Flex Skinning Little Buddha Flex allgemein 10 17-06-2009 12:43
Flex Componenten skinning (online) Nico B. Flex allgemein 4 26-05-2009 11:55
Vortrag: Skinning für Flex Komponenten (Sven Brencher) marc FFK08 1 26-05-2008 08:59


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:07 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele