Volledige versie bekijken : CloseEvent
inge88
%Europe/Berlin %585 %2007, 14:03
Dit is vast iets standaards, maar ik kan 't nergens terugvinden.
Ik heb een functie die wordt gedefineerd als een CloseEvent. Deze functie wil ik via een button aanroepen, alleen lukt dit mij niet...
hierbinnen staat de functie, maar doet er niet toe denk ik.
private function clickDelete(event:CloseEvent):void
{
}
<mx:Button id="btnDelete" label="Verwijder selecties" click="clickDelete(event)"/>
event invullen geeft de melding: Implicit coercion of a value of type flash.events:MouseEvent to an unrelated type mx.events:CloseEvent
Niks invullen geeft de melding: Incorrect number of arguments, expected 1
Dauntless
%Europe/Berlin %608 %2007, 14:35
Het is wat het zegt: Je gebruikt een MouseEvent waar hij een CloseEvent verwacht. Verander het type van het argument 'event' in clickDelete naar 'MouseEvent'.
inge88
%Europe/Berlin %609 %2007, 14:38
Ok,
Dan is 't wel interessant om te weten wat er in m'n functie staat.. nl:
event.detail == Alert.YES
Ik krijg een foutmelding als ik de boel in een MouseEvent verander...
Dauntless
%Europe/Berlin %642 %2007, 15:25
En die foutmelding is... ? (En die conditional staat in een gewone if ?)
inge88
%Europe/Berlin %650 %2007, 15:37
de foutmelding is dat detail een undefined property is.. logisch ook want die behoort tot de CloseEvent properties... hij staat inderdaad in een if condition....
TheDutch
%Europe/Berlin %651 %2007, 15:37
Hoi Inge, een CloseEvent bestaat alleen wanneer een functie aan wordt geroepen vanuit een Panel bij het event "close".
In jouw geval is het een MouseEvent aangezien het een button is waar je op klikt met de muis.
Wat probeer je te bereiken dat is belangrijk zodat ik je kan helpen het goede voor elkaar te krijgen :).
inge88
%Europe/Berlin %652 %2007, 15:39
Hoi Inge, een CloseEvent bestaat alleen wanneer een functie aan wordt geroepen vanuit een TitleWindow bij het event "close".
In jouw geval is het een MouseEvent aangezien het een button is waar je op klikt met de muis :).
Okee, maar de detail propertie dan? Ik heb die wel nodig.. iets wat in elk geval zegt: Wanneer het antwoord van de Alert button YES is....
TheDutch
%Europe/Berlin %653 %2007, 15:40
Laat even alles zien als je wilt :).
inge88
%Europe/Berlin %657 %2007, 15:46
private function clickDelete(event:MouseEvent):void
{
for(var i:int=sections_dg.dataProvider.length-1;i>=0;i--)
{
if(sections_dg.dataProvider[i].checkBoxData == true)
{
Alert.yesLabel = "Ja";
Alert.noLabel = "Nee";
Alert.show("Weet je zeker dat je deze sectie(s) wilt verwijderen?", "Verwijderen", 3, this);
{
if (event.detail == Alert.YES)
{
deleteSections.send(sections_dg.dataProvider.remov eItemAt(i));
}
else
{
//niks
}
}
}
else
{
//nothing
}
}
<mx:Button id="btnDelete" label="Verwijder selecties" click="clickDelete(event);"/>
TheDutch
%Europe/Berlin %667 %2007, 16:00
Jouw constructie van Alert.show(){} is heel eigenaardig. Je moet de closeHandler functie als argument meegeven. Dit is hoe het zou moeten:
*niet getest*:
import mx.events.CloseEvent;
import mx.controls.Alert;
private function clickDelete(event:MouseEvent):void
{
for(var i:int=sections_dg.dataProvider.length-1;i>=0;i--)
{
if(sections_dg.dataProvider[i].checkBoxData == true)
{
Alert.yesLabel = "Ja";
Alert.noLabel = "Nee";
Alert.show("Weet je zeker dat je deze sectie(s) wilt verwijderen?", "Verwijderen", 3, this, confirmDeleteHandler);
}
else
{
//nothing
}
}
}
private function confirmDeleteHandler(event:CloseEvent):void{
if (event.detail == Alert.YES)
{
deleteSections.send(sections_dg.dataProvider.remov eItemAt(i));
}
else
{
//niks
}
}
inge88
%Europe/Berlin %677 %2007, 16:15
Dit heb ik al geprobeerd.. het werkt niet.. undefined property i....
TheDutch
%Europe/Berlin %693 %2007, 16:38
Ik kijk vanavond voor je :).
inge88
%Europe/Berlin %694 %2007, 16:40
oki:)
Dauntless
%Europe/Berlin %770 %2007, 18:29
TheDutch's code geeft hier geen fouten hoor... Maar zorg er dus voor dat je die confirmDeleteHandler NIET oproept via een button click oid... Hij mag enkel opgeroepen worden als de event handler van de Alert class (en dat is dus wanneer je de functie meegeeft als argument aan de Alert.show() method)
TheDutch
%Europe/Berlin %781 %2007, 18:44
Inge,
In de confirmDeleteHandler() bestaat de variable "i" van jouw FOR loop in de clickDelete() natuurlijk niet meer. Je zou dus een array moeten maken en daar alle items die gedelete moeten worden inzetten. Vervolgens kan je in de confirmDeleteHandler() over die array loopen en ze één voor één verwijderen.
Ik denk dat je code dan zou kunnen zijn:
*niet getest*
import mx.events.CloseEvent;
import mx.controls.Alert;
private var itemsToRemoveArray:Array;
private function clickDelete(event:MouseEvent):void
{
this.itemsToRemoveArray = new Array();
for(var i:int=sections_dg.dataProvider.length-1;i>=0;i--)
{
if(sections_dg.dataProvider[i].checkBoxData == true)
{
this.itemsToRemoveArray.push(i);
Alert.yesLabel = "Ja";
Alert.noLabel = "Nee";
Alert.show("Weet je zeker dat je deze sectie(s) wilt verwijderen?", "Verwijderen", 3, this, confirmDeleteHandler);
}
else
{
//nothing
}
}
}
private function confirmDeleteHandler(event:CloseEvent):void
{
if (event.detail == Alert.YES)
{
for(var i:int=0;i<this.itemsToRemoveArray.length;i++)
{
deleteSections.send(sections_dg.dataProvider.remov eItemAt(this.itemsToRemoveArray[i]));
}
this.itemsToRemoveArray = null;
}
else
{
//niks
}
}
Het vat me trouwens op dat je vaak bij een IF statement ook een ELSE neerzet die totaal niets doet en volgensmij ook leeg blijft. Bij een IF statement is een ELSE niet verplicht hoor :).
inge88
%Europe/Berlin %464 %2007, 11:09
great:) thanks het werkt.
Ik gebruik de else omdat ik dat duidelijker vind werken...
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.