如何在flex中访问内联组件的元素?

Posted

技术标签:

【中文标题】如何在flex中访问内联组件的元素?【英文标题】:How to reach elements of an inline component in flex? 【发布时间】:2011-10-14 01:54:06 【问题描述】:

我对内联组件有疑问。我想从另一个组件访问一个内联组件。从第一个组件,我想更改第二个组件中名为“Add”的链接按钮的“启用”值。尽管我给了第二个“id”和“className”,但我既不能达到它也不能达到它的元素..有没有办法做到这一点?

*在第一个组件中,“CodedDescriptionItemEditor”组件中有一个文本输入。我想验证它并根据验证启用我上面提到的按钮..

顺便说一句,这些都在数据网格中。在datagrid中,总有一行可以输入数据,通过“添加”按钮可以保存它。保存后显示为文本..

谢谢你..

这是我的代码:

<mx:columns>
        <mx:DataGridColumn headerText="Problem" wordWrap="true" textAlign="left" sortable="false">
            <mx:itemRenderer>
                <mx:Component>
                    <mx:VBox>
                        <mx:ViewStack selectedIndex="outerDocument.index(data)" >
                            <mx:HBox>
                                <mv:CodedDescriptionItemEditor id="editor" codePM="outerDocument.problemListPanelPM.getProblemDescPM(data)" 
                                     styleName="phrFormItemInput"/>
                            </mx:HBox>
                            <mx:HBox>
                                <mv:CodedDescriptionItemRenderer id="renderer" codedDescPM="outerDocument.problemListPanelPM.getProblemDescPM(data)" />
                            </mx:HBox>  
                        </mx:ViewStack> 
                    </mx:VBox>
                </mx:Component>
            </mx:itemRenderer>
        </mx:DataGridColumn>
        <mx:DataGridColumn headerText="" textAlign="center" editable="false"  resizable="false" sortable="false">
            <mx:itemRenderer>
                <mx:Component className="buttonColumn">
                        <mx:ViewStack selectedIndex="outerDocument.index(data)" >
                            <mx:HBox horizontalAlign="center" >
                                <mx:LinkButton id="Add" icon="@Embed('img/add.png')"
                                    toolTip="outerDocument.Add_Problem"
                                    click="outerDocument.addHandWritten()"
                                    enabled="false" />
                            </mx:HBox>
                            <mx:HBox horizontalAlign="center" >
                                <mx:LinkButton id="Delete" icon="@Embed('img/delete.png')"
                                    toolTip="outerDocument.Remove_problem"
                                    click="outerDocument.removeProblem()"/>
                            </mx:HBox>
                        </mx:ViewStack>                     
                </mx:Component>
            </mx:itemRenderer>                          
        </mx:DataGridColumn>
    </mx:columns>

【问题讨论】:

【参考方案1】:

MXML 中的内联组件不是实例而是类。所以那种“触及”是没有意义的。要将这些知识结合在一起来操作它们,我建议您遵循以下简单规则(我遵循并且在理解类/实例关系方面没有问题):

不要在 MXML 中使用内联组件,不包括 原型设计阶段。

因此,在您的情况下,我建议您将内联组件提取到单独的 MXML 类中并抛出所有 outerDocument 引用(您可以将它们替换为带有冒泡的事件)。在那之后,我认为理解和改进您的设计并找到合适的解决方案会容易得多。

另一个建议是使用数据驱动的方式来操作渲染器。这种方式是操作数据提供者的数据项,而不是直接从外部文档中获取和设置数据。使用数据绑定在不同列的不同项渲染器之间绑定更改的数据。

【讨论】:

"...将内联组件提取到单独的 MXML 类中..." 我通常会尝试这样做,但这次我没有这样做。感谢您的详细建议 :)【参考方案2】:

在这种情况下,您可能希望在 outerDocument 中保留一个布尔变量 isAddEnabled,并按如下方式更改您的启用:

enabled="outerDocument.isAddEnabled"

根据您的验证条件更改此 isAddEnabled。 由于您不希望将其应用于所有项目,因此请在您的 dataProvider 中保留一个属性(首选)或维护另一个与您的 dataProvider 长度相同的集合(不推荐)。

【讨论】:

以上是关于如何在flex中访问内联组件的元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 reactjs 中使用伪元素作为内联样式? [复制]

如何将graphQl查询中的变量转换为内联样式或样式组件中的伪元素

如何从最后一行的元素中删除边框?

如何在 React Native 中使 2 个 <Text> 内联

如何通过 adobe flex 中的 actionscript 变量访问 mxml 组件?

在Flex 4中动画子元素