flex - как я могу изменить текст кнопки на случайную запись XML при нажатии? - PullRequest
0 голосов
/ 31 декабря 2011

я вчера опубликовал такой вопрос, но я не совсем понял в описании .... У меня есть приложение, которое я делаю на гибком, и я хотел бы, чтобы текст кнопки изменился на случайную запись в XMLкогда кнопка нажата .... xml находится в папке активов и называется games.xml.Я хотел бы, чтобы при нажатии кнопки было выбрано случайное название игры из XML.

здесь - games.xml

<games>
<game> blah blah game name 1
<description> description1 </description>
</game>
<game> some more blah blah game name 2
<description> description2 </description>
</game>
<game> insert GameName3 here
<description> description3 </description>
</game>
</games>

, а здесь - файл flex *

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
backgroundColor="#0000FF" title="games!">

<fx:Script>
<![CDATA[

    protected function button1_clickHandler(event:MouseEvent):void
    {
        // TODO Auto-generated method stub
        gamebutton.label="test"   <---i want this to be a random game name
    }
]]>
</fx:Script>

<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Button id="gamebutton" click="button1_clickHandler(event)" horizontalCenter="0" top="10" x="0" width="95%" label="Pick A Game"/>

</s:View>

спасибо за любую помощь, которую вы можете оказать!

Ответы [ 2 ]

1 голос
/ 31 декабря 2011

Попробуйте это:

<?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" >

    <fx:Script>
        <![CDATA[
            private var games:XML=<games>
<game> <gname>blah blah game name 1</gname>
<description> description1 </description>
</game>
<game><gname> some more blah blah game name 2</gname>
<description> description2 </description>
</game>
<game><gname> insert GameName3 here</gname>
<description> description3 </description>
</game>
</games>;
private var labelsArray:Array= [];
    private function something():void
    {
        games.game.gname.(labelsArray.push(toString()));
        var randNum:Number=Math.floor(Math.random()*labelsArray.length-1)+1;
        gamebutton.label=labelsArray[randNum].toString();
    }       
        ]]>

    </fx:Script>
            <s:Button label="click" id="gamebutton" click="something()"/>
</s:Application>
0 голосов
/ 31 декабря 2011

после завершения приложения, я использую массив, содержащий имя игры. Когда вы нажимаете кнопку, вычисляете случайное число, которое должно быть меньше длины массива, и позволяете метке кнопки равняться массиву [randomIndx] .Thus, Вы можете получить случайное имя. мой test.mxml выглядит следующим образом, он работает хорошо: D

 <?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"
        backgroundColor="#0000FF" applicationComplete="init()">

    <fx:Script>
        <![CDATA[

            private var games:Array = [];

            protected function init():void
            {
                for each(var x:XML in gameXml.children())
                {
                    games.push(String(x.@name));
                }
            }

            protected function button1_clickHandler(event:MouseEvent):void
            {
                var rIndex:int = Math.round(Math.random()*(games.length-1));
                gamebutton.label = games[rIndex];   
            }
        ]]>
    </fx:Script>

    <fx:Declarations>
        <fx:XML id="gameXml" source="assets/games.xml" format="e4x"/>
    </fx:Declarations>
    <s:Button id="gamebutton" click="button1_clickHandler(event)" horizontalCenter="0" top="10" x="0" width="95%" label="Pick A Game"/>

    </s:Application>
...