【问题标题】:Flex AS3: ComboBox set visible to false doesn't hideFlex AS3:组合框设置为 false 不隐藏
【发布时间】:2011-02-03 09:21:26
【问题描述】:

我在视图中有一个组合框,它接收有关应用程序状态更改的信息,然后应该根据整个应用程序状态显示或隐藏它的子项。

它接收状态更改消息,跟踪正确的值,执行它应该做的事情,但是,它似乎不起作用。本质上,它需要做的就是在一种状态下隐藏一个组合框,并在另一种状态下再次显示它。

代码如下:

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;


        }
    }

这是 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>

【问题讨论】:

    标签: apache-flex actionscript-3 mxml


    【解决方案1】:

    您的代码在哪里以及如何调用 updateState 函数并不清楚,要进一步了解解决方案,我认为我需要看到这一点。不过,我认为您可能想考虑一种不同的方法。

    您是否尝试过使用视图而不是手动显示和隐藏事物以及设置属性?我认为如果您在开关中的每个案例都有不同的视图状态,那么您将拥有更简单的代码,例如“登录”等。然后所有显示隐藏的东西都变成了设计时活动而不是运行时,您所要做的就是设置当前状态。

    如果您将状态名称与 ApplicationData currentState 值匹配,您甚至可以完全取消 updateState 函数。

    【讨论】:

    • 你或多或少是对的,问题是 updateState 在创建组件时被错误地调用了。所以我只是将调用放在一个 init 函数中,该函数在 creationComplete 上调用。
    • 很高兴你把它整理出来,但仍然认为你最好有视图。
    • 我最终确实切换到了那个。这是一个在 flex 中完成的大型项目,正在重构为 AIR。它位于 flex 应用程序的一个大型 MXML 文件中,因此决定从哪里开始改造一直很困难。
    【解决方案2】:

    你有没有尝试过改变

    updateState(event:* = null):void

    到这里

    updateState(event:Event = null):void

    我仍在调查事件:* 到目前为止我发现的所有内容都有 Event 而不是 *。将重新发布仍在寻找

    【讨论】:

    • 是的,可能是这样,但 :* 或多或少是一样的。虽然它不会真正影响它,但我还是改变了它。
    • 那是我不确定的,我找不到任何使用过的东西,event:* 认为您想考虑所有事件类型。不过,我也找到了 MouseEvent 和其他人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    相关资源
    最近更新 更多