Как получить доступ к сетке данных в одном MXML в другом компоненте? - PullRequest
0 голосов
/ 09 октября 2009

В моем файле mxml есть сетка данных, скажем, samp.mxml.

<mx:DataGrid id="taskDataGrid" dataProvider="{initDG}" variableRowHeight="true" 
    editable="true" width="100%"  paddingBottom="1" paddingTop="1" height="55" > 

<mx:columns>

      <mx:DataGridColumn dataField="Select" 
                editable="true" 
                rendererIsEditor="true" 
                itemRenderer="mx.controls.CheckBox" 
                editorDataField="selected" />

      <mx:DataGridColumn dataField="TaskName"
                width="220"
                editable="true" 
                rendererIsEditor="true" 
                itemRenderer="components.taskComponent"/> //i call the component.

      <mx:DataGridColumn dataField="TaskId"
                itemRenderer="mx.controls.TextInput" />     

 </mx:columns>
 </mx:DataGrid>

В одном из столбцов таблицы данных необходимо отобразить поле ввода текста и кнопку. Поэтому я написал эту функциональность как отдельный компонент, т.е. taskComponent.mxml

 <mx:TextInput id="TaskName"
    editable="true" 
    text="{data.TaskName}" 
    mouseDown="addTaskRow(event);"    
   /> 

 <mx:Button id="searchTask" label="..." width="30" height="25" click="showPopUp();"/>

Теперь, если я нажму на поле ввода текста в компоненте, я хочу добавить еще одну строку данных. Раньше у меня это было так: если я щелкаю сетку данных, добавляется строка. Поэтому я написал функцию в самом samp.mxml. Это функция для добавления строки сетки данных.

private function addTaskRow(event:MouseEvent):void
        {
            taskDataGrid.dataProvider.addItem(
                {

                }
            );
            taskDataGrid.height += 30; 

        }

Если я пытаюсь записать функцию в файле taskComponent, она показывает ошибку «Доступ к неопределенному свойству taskDataGrid». Как использовать сетку данных в компоненте task?

Ответы [ 3 ]

1 голос
/ 09 октября 2009

Добавьте trace(this.owner); к mouseDown текстового ввода и посмотрите, что он отслеживает. Если он отслеживает что-то вроде [объекта DataGrid], вы можете использовать DataGrid(this.owner) для доступа к taskDataGrid.

0 голосов
/ 09 октября 2009

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

http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html

В этой статье, в частности, показано, как использовать ListData для доступа к родительскому компоненту - ПРАВИЛЬНЫЙ способ сделать это:

http://www.adobe.com/devnet/flex/articles/itemrenderers_pt3_02.html

ListData - это ключ для доступа к родителю. Другой вариант - отправить пользовательское событие от средства визуализации.

0 голосов
/ 09 октября 2009

Вы не хотите делать это таким образом. Предположительно, коробка и кнопка добавить новое задание. Что вы хотите сделать, это добавить новую строку в переменную initDG. Это должна быть коллекция ArrayCollection. Затем, когда он будет добавлен, сетка обновится, чтобы показать новые данные.

Вы не хотите, чтобы ваш пользовательский интерфейс был данными. Вы хотите, чтобы отражало данные. Сконцентрируйтесь на изменении модели данных и просто дайте этой сетке отразить это. Возможно, вам придется немного углубиться во Flex. Сосредоточьтесь на том, чтобы больше узнать о DataGrid, dataProvider и о том, как связывание работает с ArrayCollections.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...