Flex: назначение событий динамически создаваемым кнопкам - PullRequest
0 голосов
/ 19 июля 2011

В моем приложении есть кнопки, которые пользователи нажимают, чтобы вставить предопределенные строки в текстовую область.Сейчас я загружаю значения кнопок динамически, чтобы пользователи могли определять свои собственные кнопки.

Я использую файл buttons.txt, который содержит разные метки в каждой строке (button1, button2, button3 и т. Д.),Я перебираю текстовый файл и добавляю кнопки в группу.Это все работает, но теперь самая сложная часть.Как я могу назначить список событий этим кнопкам, чтобы они выводили текст на экран?

protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void
        {
            var path:File = File.documentsDirectory.resolvePath("buttons.txt");
            myTextLoader.load(new URLRequest("file://" +path.nativePath));
            myTextLoader.addEventListener(Event.COMPLETE, onLoaded);
            trace(path.nativePath); // Traces correct file path

            mainTextField.addEventListener(SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATE, resizeTextField);
            if(data!=null){
                mainTextField.text = data.toString();
            }else{
                mainTextField.text = tags;
            }
        }

        protected function onLoaded(e:Event):void {
            var myArrayOfLines:Array = e.target.data.split(/\n/);
            var tempBtn:Button;
            trace(myArrayOfLines[0]);
            for(var i:Number = 0;i < myArrayOfLines.length;i++){
                tempBtn = new Button();
                tempBtn.label = myArrayOfLines[i];
                btnArray.push(tempBtn);
                group.addElement(btnArray[i]);
            }
        }

РЕДАКТИРОВАТЬ

    protected function onLoaded(e:Event):void {
                var myArrayOfLines:Array = e.target.data.split(/\n/);
                var tempBtn:Button;

                for(var i:Number = 0;i < myArrayOfLines.length;i++){
                    var j:Number = i+1;
                    tempBtn = new Button();
                    tempBtn.id = "btn" + i;
                    tempBtn.addEventListener(MouseEvent.CLICK, function(evt:MouseEvent):void{
                        var index:uint = parseInt(evt.currentTarget.id.replace("btn", ""));
                                    //TextArea code will go here

trace(text); // Traces null
                    });
                    tempBtn.label = myArrayOfLines[i];
                    btnArray.push(tempBtn);
                    group.addElement(btnArray[i]);
                }
            }


buttons.txt
     button1_label
    "Hello"
    button2_label
    "Goodbye"
    button3_label
    "Come again"

1 Ответ

1 голос
/ 19 июля 2011

неясно, является ли текст, который вы хотите добавить, тем же ярлыком кнопки или другим текстом. В любом случае, когда вы создаете кнопку, вы можете добавить список событий. предположим, что txtArr - это простой массив, содержащий строку, которую вы хотите добавить

for(var i:Number = 0;i < myArrayOfLines.length;i++){
    tempBtn = new Button();
    tempBtn.id = "btn" + i;
    tempBtn.addEventListener(MouseEvent.CLICK, function(evt:MouseEvent):void{
        var index = parseInt(evt.currentTarget.id.replace("btn", ""));
        var text:String = textArr[i] as String;
    });
    tempBtn.label = myArrayOfLines[i];
    btnArray.push(tempBtn);
    group.addElement(btnArray[i]);
}

Проще говоря, просто используйте поле id для сохранения текущего идентификатора кнопки, а затем при возникновении события возьмите индексный номер из идентификатора и прочитайте текст из массива. Тогда вам просто нужно добавить текстовую строку в текстовое поле

Надеюсь, это поможет

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