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

时间:2011-07-27 08:53:18

标签: flex flex3 components mxml itemrenderer

我遇到内联组件问题。我想从另一个组件到达内联组件。从第一个组件,我想更改名为“添加”的链接按钮的“启用”值,该链接按钮位于第二个组件中。 Altough我把“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)}" 
                                    width="100%" 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" width="50" resizable="false" sortable="false">
            <mx:itemRenderer>
                <mx:Component className="buttonColumn">
                        <mx:ViewStack selectedIndex="{outerDocument.index(data)}" >
                            <mx:HBox horizontalAlign="center" width="100%">
                                <mx:LinkButton id="Add" icon="@Embed('img/add.png')"
                                    toolTip="{outerDocument.Add_Problem}"
                                    click="outerDocument.addHandWritten()"
                                    enabled="false" />
                            </mx:HBox>
                            <mx:HBox horizontalAlign="center" width="100%">
                                <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>

2 个答案:

答案 0 :(得分:2)

MXML中的内联组件不是实例,而是类。所以那种“达到”没有任何意义。为了将这些知识结合起来运行它们,我建议您使用以下简单规则(我遵循并理解类/实例关系没有问题):

  

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

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

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

答案 1 :(得分:1)

在这种情况下,您可能希望在outerDocument中保留一个布尔值var isAddEnabled,并按如下所示更改您的启用:

enabled="{outerDocument.isAddEnabled}"

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