![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 211
|
Было:
получаю данные через RemoteObject - достаточно большую коллекцию сложных объектов, все НЕпримитивные объекты обозначены как Object; вставляю в DataGrid c редактированием. Выбираю нужную колонку, кликаю - появляется комбобокс с библиотечными данными, выбираю - все работает отлично. Стало: Понадобилась более сложная работа с получаемыми объектами, решил ввести AS-классы ([RemoteClass]), соответствующие серверным. С получением, сериализацией и типизацией проблем не возникло (проверял данные по событию result в RemoteObject), количество и названия свойств в точности соответствует серверному и точно соответствует тем объектам, которые я получал до создания своих классов. Таблица отображается, тут непорядков не обнаружено. Однако при клике на редактируемую ячейку (где должен появиться комбобокс) выскакивает эксепшн: ReferenceError: Error #1069: Не удалось найти свойство null в myclasses.MyClass1; отсутствует значение по умолчанию. 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)); } Я бы, конечно, мог установить поле dataField - в этом случае ошибок при выборе редактируемой ячейки не возникает, но проблемы возникают при завершении редактирования, так как данное linked свойство пользовательского объекта - непримитивное, а также объект, а синтаксис свойства dataField не позволяет указать что-то типа такого: "code.value", а при указании как "code" естественно не может записать, так как MyObject.code - это Object, а вібираемое в комбобоксе - строка. То есть вижу, что можно поиграться и перехватывать события окончания редактирования и назначать результат в них. Однако остается загадкой, почему при смене Object на MyObject при отсутствии видимых причин возникает проблема. Интуиция подсказывает, что, по всей видимости, если RemoteObject получает объект и не находит шаблона класса, куда его можно поместить (кому сопоставить), то создает свой объект типа Object, но с наследованием или расширением другого класса или интерфейса. Какого и как - не увидел и не нашел. Очень хотелось бы в этом разобраться, подскажите направление. Добавлено через 19 часов 20 минут А ларчик просто открывался ... Для DataGridColumn обязательно надо указывать dataField и для задачи типа моей editorDataField. Просто если у отображаемого столбца аналог в объекте коллекции - Object (или пользовательский класс), то editorDataField="selectedItem". Остальное - в обработчике itemEditEnd таблицы. Удивительный язык. Не сразу догадался, что вместо названия поля можно вставить ЛЮБОЕ свойство объекта. И код пришлось поковырять, чтобы прийти к решению. |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:48. |
|
|
« Предыдущая тема | Следующая тема » |
|
|