简体   繁体   中英

Flex AS3: ComboBox set visible to false doesn't hide

I have a combobox in a view that receives information about application state changes, and then is supposed to show or hide it's children based on the whole application state.

It receives state change messages, it traces the correct values, it does what it's supposed to do, however, it just doesn't seem to work. Essentially, all it needs to do is hide a combobox during one state, and show it again during another state.

Here is the code:

public function updateState(event:* = null):void {
        trace("Project Panel Updating State");
        switch(ApplicationData.getSelf().currentState) {
            case 'login':
                this.visible = false;
                break;
            case 'grid':
                this.visible = true;
                listProjects.includeInLayout = false;
                listProjects.visible = false;
                trace("ListProjects: " + listProjects.visible);
                listLang.visible = true;
                break;
            default:
                break;


        }
    }

Here is the MXML:

    <mx:HBox>
    <mx:Button id="btnLoad" x="422" y="84" label="Load" enabled="true" click="loadProject();"/>
    <mx:ComboBox id="listProjects" 
                x="652" 
                y="85" 
                editable="true" 
                change="listChange()" 
                color="#050CA8" 
                fontFamily="Arial" />   
    <mx:Label x="480" y="86" text="Language:" id="label3" fontFamily="Arial" />
    <mx:ComboBox id="listLang" 
                x="537" 
                y="84" 
                editable="true" 
                dataProvider="{langList}" 
                color="#050CA8" 
                fontFamily="Arial" 
                width="107" 
                change="listLangChange(event)"/>
    <mx:CheckBox x="830" y="84" label="Languages in English" id="langCheckbox" click='toggleLang()'/>
</mx:HBox>

It's not that clear form your code where and how the updateState function gets called, and to get any further into a solution I think I would need to see that. However, I think you may like to consider a different approach.

Have you tried using views instead of manually showing and hiding things and setting properties? I think you would have simpler code if you had a different view state for each of the cases in your switch, eg 'login' etc. Then all the showing hiding stuff becomes a design-time activity rather than run-time and all you have to do is set the current state.

If you matched your state names with your ApplicationData currentState values you may even be able to do away with the updateState function completely.

Have you tried changing

updateState(event:* = null):void

to this

updateState(event:Event = null):void

Im still looking into the event:* and everything I have found so far has Event instead of *. Will repost still looking

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM