Было:
получаю данные через RemoteObject - достаточно большую коллекцию сложных объектов, все НЕпримитивные объекты обозначены как Object; вставляю в DataGrid c редактированием. Выбираю нужную колонку, кликаю - появляется комбобокс с библиотечными данными, выбираю - все работает отлично.
Стало:
Понадобилась более сложная работа с получаемыми объектами, решил ввести AS-классы ([RemoteClass]), соответствующие серверным. С получением, сериализацией и типизацией проблем не возникло (проверял данные по событию result в RemoteObject), количество и названия свойств в точности соответствует серверному и точно соответствует тем объектам, которые я получал до создания своих классов. Таблица отображается, тут непорядков не обнаружено. Однако при клике на редактируемую ячейку (где должен появиться комбобокс) выскакивает эксепшн:

Код:
ReferenceError: Error #1069: Не удалось найти свойство null в myclasses.MyClass1; отсутствует значение по умолчанию.
Ошибка эта выскакивает в стандартном модуле ComboBox.as:

Код AS3:
public function set data(value:Object):void {
var newSelectedItem:*;
_data = value;
if (_listData && _listData is DataGridListData) newSelectedItem = _data[DataGridListData(_listData).dataField]; //вот тут выскакивает
else if (_listData is ListData && ListData(_listData).labelField in _data)newSelectedItem = _data[ListData(_listData).labelField];
else newSelectedItem = _data;
if (newSelectedItem !== undefined && !selectedItemSet) {
selectedItem = newSelectedItem;
selectedItemSet = false;
}
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
}
Контейнер комбобокса-itemEdotor'а - DataGridColumn - действительно не имеет поля dataField (не определено), так как используется labelFunction. И до введения пользовательских классов value был определен как Object и также не имел поля dataField, но ошибок не возникало; правда, еще появлялось свойство mx_internal_uid в объекте.
Я бы, конечно, мог установить поле dataField - в этом случае ошибок при выборе редактируемой ячейки не возникает, но проблемы возникают при завершении редактирования, так как данное linked свойство пользовательского объекта - непримитивное, а также объект, а синтаксис свойства dataField не позволяет указать что-то типа такого: "code.value", а при указании как "code" естественно не может записать, так как MyObject.code - это Object, а вібираемое в комбобоксе - строка.
То есть вижу, что можно поиграться и перехватывать события окончания редактирования и назначать результат в них. Однако остается загадкой, почему при смене Object на MyObject при отсутствии видимых причин возникает проблема.
Интуиция подсказывает, что, по всей видимости, если RemoteObject получает объект и не находит шаблона класса, куда его можно поместить (кому сопоставить), то создает свой объект типа Object, но с наследованием или расширением другого класса или интерфейса. Какого и как - не увидел и не нашел. Очень хотелось бы в этом разобраться, подскажите направление.
Добавлено через 19 часов 20 минут
А ларчик просто открывался ...
Для DataGridColumn обязательно надо указывать dataField и для задачи типа моей editorDataField. Просто если у отображаемого столбца аналог в объекте коллекции - Object (или пользовательский класс), то editorDataField="selectedItem". Остальное - в обработчике itemEditEnd таблицы.
Удивительный язык. Не сразу догадался, что вместо названия поля можно вставить ЛЮБОЕ свойство объекта. И код пришлось поковырять, чтобы прийти к решению.