Как заменить мои узлы в моем XML, из inputTextField? - PullRequest
0 голосов
/ 26 декабря 2011

У меня есть inputTextField, и в моем inputTextField в моем классе GamePage я хочу иметь возможность взять текст, который вы должны быть в состоянии записать в inputTextField, и заменить текст из inputTextField на мои узлы в моем xml-фил.В моем классе Xml выше я хочу иметь тот код, который преобразует текст из inputTextField, например.Если я напишу «обезьяна» в моем inputTextField, я хочу заменить узел {ANIMAL} в моем xml-файле на обезьяну.

package 
{

    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.xml.XMLDocument;
    import flash.xml.XMLNode;

    public class Xml extends Sprite 
    {

        private var xmlText:TextField;
        private var xml:XML;
        private var textBox:TextField;

        public function Xml() 
        {

            var xmlString:URLRequest = new URLRequest("tales.xml");
            var xmlLoader:URLLoader = new URLLoader(xmlString);

            xmlLoader.addEventListener("complete", init);

            function init(event:Event):void 
            {

                var xml:XML = XML(xmlLoader.data);
                var xmlText:TextField = new TextField();

                addChild(xmlText);

                xmlText.width = 500; xmlText.height = 500; xmlText.x = 5; xmlText.y = 100;
                xmlText.text = xml.tale; XML.ignoreWhitespace = true;

                var format:TextFormat = new TextFormat();
                format.color = 0x990000;
                format.size = 18;

                xmlText.setTextFormat(format); 
            }
        }
    } 
}

Это мой xml-fil ( Google Translated from Swedish *)1005 *):

Однажды был {ЖИВОТНЫЙ}, пришедший из {ГОРОДА}.ЖИВОТНЫЙ {ЖИВОТНЫЙ} жил в маленьком маленьком красном джулусе, как и Санта.У {CITY} также был ее Санта-Клаус и его имя {ИМЯ}.{ANIMAL} и {NAME} были лучшими друзьями много лет назад, и они жили в одном маленьком красном домике.

1 Ответ

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

Если вы хотите заменить текст изменением InputField, вам следует прослушать Event.CHANGE из InputFields.В этом слушателе вы можете перенаправить метод, который будет выполнять замену.После загрузки XML вы должны также вызвать этот метод, чтобы удалить начальные значения.

Я не видел InputFields в вашем примере кода, так что вот краткий пример того, как вы можете его настроить.

private var animalInputField:TextField;
private var cityInputField:TextField;
private var nameInputField:TextField;
private var xmlText:TextField;  

public function Xml() 
{

    var xmlString:URLRequest = new URLRequest("tales.xml");
    var xmlLoader:URLLoader = new URLLoader(xmlString);

    xmlLoader.addEventListener(Event.COMPLETE, init);

    function init(event:Event):void 
    {

        xml = XML(xmlLoader.data);
        xmlText = new TextField();

        addChild(xmlText);

        xmlText.width = 500; xmlText.height = 500; xmlText.x = 5; xmlText.y = 100;
        xmlText.text = xml.tale; 
        XML.ignoreWhitespace = true;

        var format:TextFormat = new TextFormat();
        format.color = 0x990000;
        format.size = 18;

        xmlText.setTextFormat(format); 

        // create inputfields
        animalInputField = createInputField();
        cityInputField = createInputField();
        nameInputField = createInputField();

        cityInputField.x = 100;
        nameInputField.x = 200;

        updateTale();
    }
}

private function createInputField() : TextField
{
    var inputField:TextField = TextField(addChild(new TextField()));
    inputField.type = TextFieldType.INPUT;
    inputField.text = '...';

    inputField.addEventListener(Event.CHANGE, onInputChanged);

    return inputField;
}

private function onInputChanged(e:Event):void
{
    updateTale();
}

private function updateTale() : void
{

    var tale:String = xml.tale;

    tale = tale.replace(/{ANIMAL}/g, animalInputField.text);
    tale = tale.replace(/{CITY}/g, cityInputField.text);
    tale = tale.replace(/{NAME}/g, nameInputField.text);

    xmlText.text = tale;
}

В методе updateTale() я использую регулярное выражение, где я использую флаг 'g' (глобальный) , чтобы выполнить поиск Flash по любому экземпляру, а не только по первому вхождению..

Обратите внимание, что в вашем примере у вас есть приватные переменные xmlText и xml, но вы никогда их не используете, потому что в вашем init(event:Event) слушателе вы создаете две локальные переменные с именами xmlText и xml также.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...