我遇到内联组件问题。我想从另一个组件到达内联组件。从第一个组件,我想更改名为“添加”的链接按钮的“启用”值,该链接按钮位于第二个组件中。 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>
答案 0 :(得分:2)
MXML中的内联组件不是实例,而是类。所以那种“达到”没有任何意义。为了将这些知识结合起来运行它们,我建议您使用以下简单规则(我遵循并理解类/实例关系没有问题):
不要在MXML中使用内联组件,不包括简单的情况 原型设计阶段。
因此,在您的情况下,我建议您将内联组件提取到单独的MXML类中并抛出所有outerDocument
引用(您可以将它们替换为带有冒泡的事件)。在那之后,我认为理解和改进您的设计并找到合适的解决方案会更容易。
另一个建议是使用数据驱动的方式与渲染器一起操作。这种方式是关于操作数据提供者的数据项,而不是直接从外部文档获取和设置数据。使用数据绑定绑定不同列中不同项呈示器之间的已更改数据。
答案 1 :(得分:1)
在这种情况下,您可能希望在outerDocument中保留一个布尔值var isAddEnabled,并按如下所示更改您的启用:
enabled="{outerDocument.isAddEnabled}"
根据您的验证标准更改此isAddEnabled。 由于您不希望它应用于您的所有项目,因此请在dataProvider中保留一个属性(首选)或维护与dataProvider相同长度的另一个集合(不推荐)。