Flex комбинированный дочерний (textInput, кнопка) доступ - PullRequest
0 голосов
/ 15 декабря 2011

Мне нужно получить доступ к дочернему списку со списком (ввод текста и кнопка) без создания настраиваемого компонента.Я знаю, что наилучшей практикой является создание пользовательского компонента, но все же необходимо получить доступ к дочернему элементу комбинированного списка, например textinput, и прослушать его событие.Любая помощь?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2011

Вы можете добавить событие в textInput вашего comboBox следующим образом:

myComboBox.textInput.addEventListener(TextOperationEvent.CHANGE, myFunction);

, потому что объект textInput является дочерним для объекта comboBox (myComboBox.textInput).1006 * Вот полный рабочий пример

<?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" creationComplete="creationCompleteHandler(event)">

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;

            import spark.events.IndexChangeEvent;
            import spark.events.TextOperationEvent;

            [Bindable]
            private var _dp:ArrayCollection = new ArrayCollection([
                {id : "1", name : "Paul"},
                {id : "2", name : "Andrew"},
                {id : "2", name : "Bob"}
            ]);

            protected function creationCompleteHandler(event:FlexEvent):void
            {
                myComboBox.textInput.addEventListener(TextOperationEvent.CHANGE, showTextInputValue);
                myComboBox.addEventListener(IndexChangeEvent.CHANGE, showComboValue);
            }

            protected function showTextInputValue(event:TextOperationEvent):void
            {
                textFieldValue.text = "myComboBox.textInput : " + event.currentTarget.text;
            }

            protected function showComboValue(event:IndexChangeEvent):void
            {
                if (event.newIndex > -1)
                    comboBoxValue.text = "myComboBox selected item is : " + myComboBox.selectedItem.name;
            }

        ]]>
    </fx:Script>

    <s:layout>
        <s:VerticalLayout/>
    </s:layout>

    <s:ComboBox id="myComboBox" labelField="name" dataProvider="{_dp}"/>

    <mx:Spacer height="100"/>

    <s:Label id="textFieldValue"/>

    <s:Label id="comboBoxValue"/>

</s:WindowedApplication>
0 голосов
/ 15 декабря 2011

Вы можете добавить прослушиватель событий для Event.ADDED в ComboBox и проверить тип event.target, чтобы точно указать нужные экранные объекты (например, if (event.target is TextField ) doStuff();). Вы не сможете получить доступ к свойству combobox ' заменить текстовое поле или кнопку другим), но вы можете изменить экземпляр, который был добавлен на сцену.

...