Проблема установки свойства текста в выпадающем списке при запуске приложения во Flex - PullRequest
1 голос
/ 20 июля 2011

Я использую пример combocheck со следующего сайта: http://www.carballares.es/en/arcadio/?p=220

Это очень полезный компонент и очень хорошо работает.

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

Например, я хочу установить для свойства text поля со списком значение «Bob» (который является одним из элементов в поставщике данных для поля со списком), и в поле со списком вызывается метод «set text». Выполнение пошагового выполнения показывает, что метод «set text» получает правильный элемент значения, но не устанавливает свойство _text.

Я пытался ничего не делать до "ApplicationComplete", но и радости нет.

Заранее благодарим за любую помощь или подсказки, которые вы можете предложить.

// Редактировать Вот код (комбинация кода из приведенного выше URL-адреса и некоторых других изменений в нем). Однако, как я уже говорил выше, коды работают . Проблема в том, что он не работает при запуске приложения. Всякий раз, когда происходит событие и в результате вызывается setComboText, текст поля со списком устанавливается правильно.

    private function onComboChecked(event:ComboCheckEvent):void {
        var obj:Object=event.obj;
        var index:int=selectedItems.getItemIndex(obj);
        if (index==-1) {
            selectedItems.addItem(obj);
        } else {
            selectedItems.removeItemAt(index);
        }

        setComboText();

        dispatchEvent(new Event("valueCommit"));
        dispatchEvent(new Event("addItem"));
    }

    public function setComboText():void {

        if (selectedItems.length>1) {
            // text='multiple'
            //modified by samuel

           var items:ArrayCollection = selectedItems;
           var selItems:String = "";

           for (var item:String in items) 
           {  
                if (items[item].label != "ALL" ) {
                 selItems = selItems + items[item].label + ",";
                }
           } 

           if (selItems.length > 0){
                selItems = selItems.substr(0,selItems.length - 1);
           }


           text = selItems;
        }
        if (selectedItems.length==1) {
            text=selectedItems.getItemAt(0)[labelField];
        }
        if (selectedItems.length<1) {
            //modified by samuel
            text="ALL";
            //Alert.show("text is "+text);
        }
    }

Ответы [ 2 ]

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

Попробуйте добавить этот метод в основной компонент ComboBox, который вы расширяете:

        public function set selectedValueList( val : String ) : void {
            var selectedValueArray :Array = val.toLowerCase().split(',');
            var dp :ArrayCollection = this.dataProvider as ArrayCollection;
            var newSelectedItems:ArrayCollection=new ArrayCollection();
            for each ( var selectedVal :String in selectedValueArray ){
                for( var i :uint=0;i<dp.length;i++){
                    if( String(dp.getItemAt(i)[this.labelField]).toLowerCase() == selectedVal ){
                        newSelectedItems.addItem( dp.getItemAt(i) );
                    }
                }
            }
            selectedItems = newSelectedItems;
            if (selectedItems.length>1) { text='multiple'; }
            if (selectedItems.length==1) { text=selectedItems.getItemAt(0)[labelField]; }
            if (selectedItems.length<1) { text=''; }            
            dispatchEvent(new Event("valueCommit"));
            dispatchEvent(new Event("addItem"));
        }

Тогда вы будете называть его так, когда хотите установить выбранные элементы:

myComboId.selectedValueList = 'Selected Label 1,Selected Label 2';

Или установите его в компоненте mxml def:

<local:ComboBox selectedValueList="Selected Label 1,Selected Label 2" ...rest of properties.../>

Или привяжите к нему:

<local:ComboBox selectedValueList="{variableHoldingCommaDelimList}" ...rest of properties.../>

Дайте мне знать, как это происходит.:)

0 голосов
/ 20 июля 2011

Я не уверен, что вы подразумеваете под «заданным текстом» в случае со списком.Скорее это должен быть выбран индекс, который вы должны устанавливать.Кроме того, вместо applicationComplete ИЛИ creationComplete переопределите метод commitProperties и присвойте ему это начальное свойство (хотя вы можете просто назначить selectedIndex в самом mxml).

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