Archief - [FLEX] State veranderen na click (vanuit cust. comp)

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

KingOfWoods

Legacy Member
Hallo allemaal.

Eigenaardig probleempje.

Ik heb een main applicatie met daarin een component login

dus
Code:
<App>
     <comp:Login/>
</App>

Mijn Login bevat ook nog eens een component = Button.

Als ik op button klik wil ik dat mijn main App zijn state van Stat1 veranderd naar SuccesState

Hoe krijg ik dit voor mekaar, want nu geeft hij mij de error

Description Resource Path Location Type
1120: Access of undefined property Succes. Login.mxml /MovieList/src/components line 16 Flex Problem
1188: Illegal assignment to class State. Login.mxml /MovieList/src/components line 16 Flex Problem

extra code: dit is dus in mijn Login component
Code:
	<![CDATA[
		import mx.states.State;
		protected function button1_clickHandler(event:MouseEvent):void
		{
			// TODO Auto-generated method stub
			State = Succes;
		}
	]]>

===========================================

<components:Button click="button1_clickHandler(event)"/>

iemand die weet hoe ik dit kan verwezenlijken?

Zero Grav

Legacy Member
Het beste vind ik persoonlijk om met een application model te gaan werken waar uw currentState wordt bijgehouden. Zo zijt ge altijd zeker dat al uw componenten de juiste state kunnen aanpassen en kunt ge er ook een check op uitvoeren.

Maar ge kunt ook een event dispatchen vanuit uw childComponent en dat opvangen in uw parent waarop ge de wijziging doorvoert.

Uw state moet trouwens sowieso een String zijn, de fout die hij nu geeft is dat em de variabele Success niet vindt. En de tweede fout is dat ge probeert een waarde toe te wijzen aan de State klasse (let op de hoofdletter).

Als ge dat via Catalyst doet gaat em het via mx.core.FlexGlobals.ToplevelApplication.currentState aanspreken. 'k Vind het persoonlijk wel handig om zo'n links te leggen met Adobe Flash Catalyst.

KingOfWoods

Legacy Member
Main code:
Code:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   skinClass="skins.AppSkin" xmlns:components="components.*">

	
	<fx:Style source="myStyle.css"/>
	
        <s:states>
		<s:State name="State1"/>
		<s:State name="Succes"/>
	</s:states>
		
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	
	<s:VGroup width="100%" height="100%" horizontalAlign="center" horizontalCenter="0" verticalCenter="0">
		<s:Image source="assets/images/titel.png" scaleMode="stretch" width="600" height="100" id="logo" />
		<components:Login includeIn="State1"/>	
	</s:VGroup>
</s:Application>

Login component ziet er zo uit:
Code:
<?xml version="1.0" encoding="utf-8"?>
<s:Form xmlns:fx="http://ns.adobe.com/mxml/2009"
		xmlns:s="library://ns.adobe.com/flex/spark"
		xmlns:mx="library://ns.adobe.com/flex/mx"
		width="300" height="220" xmlns:components="components.*">
	<s:layout>
		<s:VerticalLayout horizontalAlign="left"/>
	</s:layout>
	
	<fx:Script>
		<![CDATA[
			import mx.states.State;
			protected function button1_clickHandler(event:MouseEvent):void
			{
				// TODO Auto-generated method stub
				currentState = Succes;
			}
		]]>
	</fx:Script>
	
	
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	
	<s:BorderContainer width="100%" height="160" backgroundColor="#232323" borderVisible="false">
		<s:layout>
			<s:VerticalLayout gap="10" paddingBottom="10" paddingLeft="10" paddingRight="10"
							  paddingTop="10"/>
		</s:layout>
		<s:Label styleName="labelYellow" text="Login Name"/>
		<s:TextInput width="100%" styleName="textinput"/>
		<s:Label styleName="labelYellow" text="Password"/>
		<s:TextInput styleName="textinput" width="100%"/>	
		
		<s:VGroup width="100%" height="30" horizontalAlign="right">
			<components:Button click="button1_clickHandler(event)"/>
		</s:VGroup>
	</s:BorderContainer>
	
	<s:BorderContainer width="100%" height="100%" backgroundAlpha="0.0" borderVisible="false">
		<s:layout>
			<s:VerticalLayout horizontalAlign="right" paddingLeft="5"/>
		</s:layout>
		<s:HGroup verticalAlign="middle" paddingTop="10" paddingRight="15">		
			<s:Label styleName="labelYellow" text="Don't have a login?"/>
			<s:Label styleName="labelBtn" text="Create new user!"/>
		</s:HGroup>
	</s:BorderContainer>


</s:Form>

Hier zie je dus dat mijn Submit knop ook een component is met een click event op.

code van button, niet dat er veel te zien valt
Code:
<?xml version="1.0" encoding="utf-8"?>
<s:Button xmlns:fx="http://ns.adobe.com/mxml/2009" 
		  xmlns:s="library://ns.adobe.com/flex/spark" 
		  xmlns:mx="library://ns.adobe.com/flex/mx"
		  xmlns:components="components.*"
		  skinClass="skins.sparkButtonSkin"
		  label="Submit" width="100" height="30">
</s:Button>

Ik zou inderdaad dus in mijn login component moeten kunnen terug verwijzen aar mijn main app. Alleen ben ik vergeten hoe dit gaat.
Heb die website van Cycloon ook bekeken, maar vind daar mijn specifiek probleem niet terug.

States veranderen lukt mij probleemloos zolang ik binnen mijn Application venster blijf. Eens ik een niveau zak naar mijn components krijg ik ze dus in Application niet meer angesproken.

Cycloon

Legacy Member
Het probleem is dat je vanuit je login component geen enkele link meer hebt met je applicatie om je states te kunnen wijzigen. De meest eenvoudige manier zou zijn dat je een event raised vanuit je component wanneer je succesvol bent ingelogd. Je main app kan zich dan registreren op dat event en de state zelf veranderen.

KingOfWoods

Legacy Member
Cycloon zei:
Het probleem is dat je vanuit je login component geen enkele link meer hebt met je applicatie om je states te kunnen wijzigen. De meest eenvoudige manier zou zijn dat je een event raised vanuit je component wanneer je succesvol bent ingelogd. Je main app kan zich dan registreren op dat event en de state zelf veranderen.

En hoe raise ik een event vanuit mijn comp naar boven? Sorry kan mss makkelijk zijn, maar flex is hier ver 2 jaar geleden en ik ben er ook nooit ne superman in geweest. ben ondertussen ook de flex bible aan het doornemen, maar om concrete oplossingen te vinden is dat ook niet het beste gerief.

merci alvast voor de hulp
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan