Как добраться до элементов встроенного компонента в flex? - PullRequest
0 голосов
/ 27 июля 2011

У меня проблема со встроенными компонентами. Я хочу получить встроенный компонент от другого. В первом компоненте я хочу изменить значение «enable» кнопки ссылки с именем «Add», которая находится во втором компоненте. Хотя я дал "id" и "className" второму, я не мог достичь ни его, ни его элементов ... есть ли способ сделать это?

* в первом компоненте есть текстовый ввод в компоненте "CodedDescriptionItemEditor". Я хочу проверить это и в соответствии с валидацией включить кнопку, которую я упомянул выше.

Кстати, все они в сетке данных. В сетке данных всегда есть строка, в которую вы можете ввести данные, и с помощью кнопки «Добавить» вы можете сохранить их. После сохранения это выглядит как текст ..

Спасибо ..

Вот мой код:

<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 ]

2 голосов
/ 27 июля 2011

Встроенные компоненты в MXML - это не экземпляры, а классы. Так что такого рода «достижение» не имеет смысла. Чтобы объединить эти знания и использовать их, я рекомендую вам следующее простое правило (которому я следую, и у меня нет проблем с пониманием отношений класса / экземпляров):

Не используйте встроенные компоненты в MXML, за исключением простых случаев этап прототипирования.

Так что в вашем случае я рекомендую вам извлечь встроенные компоненты в отдельные классы MXML и выбросить все ссылки outerDocument (вы можете заменить их на события с пузырьками). После этого я думаю, что вам будет намного легче понять и улучшить ваш дизайн и найти подходящее решение.

Еще один совет - использовать управляемый данными способ работы с визуализаторами. Этот способ касается рабочих элементов данных поставщика данных, а не получения и установки данных из внешнего документа напрямую. Используйте привязку данных для привязки измененных данных между различными средствами визуализации элементов в разных столбцах.

1 голос
/ 27 июля 2011

В этом случае вы можете захотеть сохранить логическое значение var isAddEnabled в вашем outerDocument и изменить включенное значение следующим образом:

enabled="{outerDocument.isAddEnabled}"

Измените это isAddEnabled в соответствии с вашими критериями проверки.Поскольку вы не хотите, чтобы он применялся ко всем вашим элементам, либо оставьте свойство в вашем dataProvider (предпочтительно), либо сохраните другой набор такой же длины, что и ваш dataProvider (не рекомендуется).

...