简体   繁体   English

Flex AS3:ComboBox设置为false不会隐藏

[英]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: 这是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. 您的代码在何处以及如何调用updateState函数,以及如何进一步深入解决方案中,尚不清楚,我想我需要看看。 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. 如果将状态名称与ApplicationData currentState值进行匹配,则甚至可以完全取消updateState函数。

Have you tried changing 您是否尝试过改变

updateState(event:* = null):void updateState(event:* = null):void

to this 对此

updateState(event:Event = null):void 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 仍会重新发布

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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