actionscript 3 - Adobe Flex Project: Buttons seem to be calling wrong methods -
when run code, if click 'testexporttocsv' button, application executes expected ['save file to...' window opens]. however, once click button, other 2 buttons somehow trigger same window ['save file to...'] open if had clicked 'testexporttocsv' button. whilst debugging application, learned other 2 buttons indeed entering correct click handling method although somehow end executing function 'writecsv(event:mouseevent)' declared inside function 'writetoout()' called when 'testexporttocsv' button clicked.
please explain why happening
<?xml version="1.0" encoding="utf-8"?> <s:windowedapplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minwidth="955" minheight="601" backgroundcolor="#3b5998" creationcomplete="windowedapplication1_creationcompletehandler(event)"> <fx:script> <![cdata[ import mx.events.flexevent; import mx.rpc.http.httpservice; protected function windowedapplication1_creationcompletehandler(event:flexevent):void {} /** ######## click handlers ######## */ protected function csvbutton_clickhandler(event:mouseevent):void{ trace("...inside csvbutton_clickhandler(event:mouseevent) "); textbox.text = "in export csv method"; writetoout(); } protected function queryserver_clickhandler(event:mouseevent):void{ trace("...inside queryserver_clickhandler(event:mouseevent) "); textbox.text = "in query server method"; servicerequest.url = "https://msppluto.com/planholders_flex.php?customerid=15"; servicerequest.send(); } protected function refresh_clickhandler(event:mouseevent):void{ trace("...inside refresh_clickhandler(event:mouseevent) "); textbox.text = "in refresh method"; validatenow(); } /** ######## write ... ######## */ protected function writetoout():void{ var myarray:array = []; for(var i:int = 0; < 100; i++) myarray[i] = {a:math.random()*100, b:math.random()*100, c:math.random()}; var csv:string = ''; for(i = 0; < 100; i++) csv += myarray[i].a + ',' + myarray[i].b + ',' + myarray[i].c + '/n'; stage.doubleclickenabled = true; stage.addeventlistener(mouseevent.click, writecsv); // why method being called when click different // button ????????????????????????????????????????? function writecsv(event:mouseevent):void{ var file:filereference = new filereference(); var bytes:bytearray = new bytearray(); bytes.writeutfbytes(csv); file.save(bytes, 'test.csv'); } } // end writetoout ]]> </fx:script> <fx:declarations> <s:httpservice id="servicerequest" url="https://msppluto.com/planholders_flex.php" useproxy="false"> </s:httpservice> </fx:declarations> <s:label id="headline" text="http service" fontsize="45" x="10" y="10" color="#ffffff"></s:label> <s:button id="testexporttocsv" x="14" y="187" minwidth="110" label="export csv" click="csvbutton_clickhandler(event)"/> <s:button id="queryserverbutton" x="14" y="216" minwidth="110" label="query server" click="queryserver_clickhandler(event)"/> <s:button id="refreshscreen" x="14" y="245" minwidth="110" label="refresh" click="refresh_clickhandler(event)"/> <s:textinput id="textbox" x="197" y="216" widthinchars="25" /> <mx:datagrid id="datagridforservicerequest" x="575" y="160" dataprovider="{servicerequest.lastresult.planholders.planholder}"> <mx:columns> <mx:datagridcolumn headertext="user id" datafield="userid"/> <mx:datagridcolumn headertext="user name" datafield="username"/> </mx:columns> </mx:datagrid>
i dont know context of problem. problem line stage.addeventlistener(mouseevent.click, writecsv);
you can make
testexporttocsv.addeventlistener(mouseevent.click, writecsv);
and have place above statement in creation complete event handler , bring function outside writeout function., otherwise not execute first time
hope helps
Comments
Post a Comment