Порядок событий при наличии вложенных элементов в сетке данных Flex - PullRequest
0 голосов
/ 07 июня 2011

Допустим, у меня есть сетка данных, и к ней прикреплен метод, позволяющий щелкнуть любой элемент в строке сетки. Теперь некоторые элементы в строке таблицы также являются кнопками. Каждый из них связан с определенным действием. Мы только хотим, чтобы одно из этих действий было выполнено. Вот пример кода:

<mx:DataGrid id="dataGrid" dataProvider="{data}" itemClick="selectRow()">
    <mx:columns>
        <mx:DataGridColumn dataField="name" />
        <mx:DataGridColumn id="choose" headerText="Make a choice">
            <mx:itemRenderer>
                <mx:Component>
                    <mx:VBox>
                        <renderers:MyButton label="Choose Wisely" click="{outerDocument.choiceMade()}"/>
                    </mx:VBox>
                </mx:Component>
            </mx:itemRenderer>
        </mx:DataGridColumn>
    </mx:columns>
</mx:DataGrid>

Мой вопрос:

Когда пользователь выбирает элемент кнопки в строке, выполняются оба метода (selectRow & choiceMade). Поскольку оба метода выполнено, порядок обоих исправлен каким-то образом? Всегда ли метод кнопки (choiceMade) запускается перед методом строки (selectRow), это наоборот, или они оба выполняются асинхронно?

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

Я не очень хорошо разбираюсь в том, как все это работает, поэтому любой свет, который вы можете пролить на то, как Flex запускает эти методы, будет оценен. Является ли флаг переменной-члена способом сделать это (он так плохо пахнет)?

1 Ответ

1 голос
/ 07 июня 2011

Оба события будут отправлены, и это произойдет почти одновременно.Вы действительно не должны рассчитывать на порядок выполнения при работе с событиями.Это не очень хорошая практика.

Что касается вашей конкретной проблемы, вы можете сделать это:

<renderers:MyButton label="Choose Wisely" 
                    click="event.stopImmediatePropagation(); 
                           outerDocument.choiceMade()" />

Это остановит распространение события click через список отображения и, таким образом, сетка данных не получитсобытие itemclick.Метод selectrow () не будет выполняться при нажатии на кнопку.

...