组件在表单上不可见

Posted

技术标签:

【中文标题】组件在表单上不可见【英文标题】:Component isn't visible on the form 【发布时间】:2011-10-17 09:38:45 【问题描述】:

如果用户无权更改值,我制作了一个非常简单的组件来替换表单上隐藏的任何组件(例如组合框):

<?xml version="1.0" encoding="utf-8"?>
<mx:Label xmlns:mx="http://www.adobe.com/2006/mxml"
          visible="!_controlToReplace.visible"
          includeInLayout="!_controlToReplace.includeInLayout">
    <mx:Script>
        <![CDATA[
            import mx.core.UIComponent;
            [Bindable]
            private var _controlToReplace:UIComponent;

            public function set controlToReplace(value:UIComponent):void
            
                _controlToReplace=value;
            
        ]]>
    </mx:Script>
</mx:Label>

通过在表单上添加标签可以轻松实现组件的相同功能:

<mx:Label text="objControl.text"
visible="!objControl.visible"
includeInLayout="!objControl.includeInLayout"/>

使用组件我可以做到这一点,我更喜欢:

<Components:ReadOnlyPlaceHolder controlToReplace="objControl"/>

但无论 objControl 是否可见,它都不会显示。你知道我可能会错过什么吗?

【问题讨论】:

我很困惑。你用 read-only 控件替换 label 吗?我知道这可能是为了保护您的代码而进行的简化,但这没有意义。另外,什么是 objControl? @[Sam DeHaan]很抱歉造成混乱。我的意思是组件提供的功能无论如何都可以通过标签轻松实现,即组件和标签是替代品。标签和组件都用自己替换另一个控件(例如组合框)。我现在将澄清这个问题。 【参考方案1】:

我认为问题在于绑定没有更新标签上的属性。不要使用绑定,只需手动更新它们,例如:

public function set controlToReplace(value:UIComponent):void

    _controlToReplace=value;
    visible = !_controlToReplace.visible;
    includeInLayout = !_controlToReplace.includeInLayout;

如果这不起作用,您必须向我们展示您的表单以及用于定位和显示您的 ReadOnlyPlaceHolder 的布局代码。

【讨论】:

以上是关于组件在表单上不可见的主要内容,如果未能解决你的问题,请参考以下文章

如何调试据称正在应用但在页面上不可见的样式?

表单 - Form - 无刷新提交原理

为啥不为不可见组件触发 OnUpdate [重复]

WICKET:控制组件在更改 CheckBox 时的可见性

标识符“creal”未定义 - 在 Mac 上可见但在 Linux 上不可见

CSS col 可见性:折叠在 Chrome 上不起作用