Как динамически заполнять параметры в поле со списком внутри сетки на основе другой строки в Flex?

Я пытаюсь настроить DataGrid, содержащий столбец со списком. Значения полей со списком определяются данными, относящимися к этой строке. Я не могу заставить это работать, я прошу решения этой проблемы, либо исправив то, что у меня есть ниже, либо порекомендую другим способом.

В одном из столбцов моего DataGrid есть объект, производный от ComboBox для ItemEditor. ItemEditor настроен так:

    <mx:DataGridColumn editorDataField="selectedItem" dataField="type" editable="true" >
        <mx:itemEditor>
            <mx:Component>
            <FilterCell:SelectCellBase initialize="set_combo()" grid="{this}"/>
            </mx:Component>
        </mx:itemEditor>
    </mx:DataGridColumn>

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

Затем функция set_combo () SelectCellBase определяется как таковая:

            public function set_combo( ) : void 
            {
                var type : String = grid.dataProvider[grid.selectedIndex]['type'];

                if( 'text' == type )
                {
                    this.dataProvider = text;
                }
                else
                {
                    this.dataProvider = number;
                }
            }

Однако эта реализация не работает, потому что, когда я пытаюсь вызвать grid.selectedIndex, кажется, что он всегда возвращает -1.

Что я делаю не так или что может быть лучше?


person mfollett    schedule 08.09.2009    source источник


Ответы (1)


Ваша проблема в том, что когда вы находитесь внутри <mx:Component>, область видимости является локальной и больше не устанавливается на внешний файл MXML. Итак, когда у вас есть:

<mx:Component>
<FilterCell:SelectCellBase initialize="set_combo()" grid="{this}"/>
</mx:Component>

"this", о котором вы говорите, является определенным вами встроенным компонентом, а не базовым компонентом MXML, над которым вы работаете. Простое решение - изменить его на

<mx:Component>
<FilterCell:SelectCellBase initialize="set_combo()" grid="{outerDocument}"/>
</mx:Component>

переменная outerDocument автоматически устанавливается, когда вы находитесь внутри тега <mx:Component>, и может использоваться для доступа ко всему необходимому из родительской области.

person rtward    schedule 08.09.2009