Вход

Просмотр полной версии : mx_internal_uid и преобразование типа


GrMerlin
15.04.2010, 20:15
Следующая ситуация: Есть датагрид и есть тип данных Professor(запись базы данных. Описан как класс) который отображается в датагриде как ArrayCollection. При выборе записи датагрида необходимо присвоить ее переменной типа Professor. Это обеспечивается через событие change датагрида. В обработчик события передаю параметр event. В обработчике переменной присваиваю
editedProfessor = Professor(DataGrid(event.target).selectedItem)
Вот тут возникает проблема... Вылетает ошибка:
Error #1034: Ошибка типа Coercion: невозможно преобразовать Object@566b499 в diplomServices.Professor.
Начал дебагить... Оказывается компилятор приписывает mx_internal_uid переменной data эвента. А при аналогичной обработке похожих классов компилятор не присваивает mx_internal_uid переменной data эвента. В общем, какие идеи?

wvxvw
15.04.2010, 21:12
Одно к другому не относится. Ошибка потому, что вы использовали нетипизированый объект (возможн, сериализация не правильно написана) и попытались его конвертировать в объект определенного типа.
uuid / mx_internal_uuid и тому подобная ересь генерится для динамических объектов используемых в коллекции, если эта коллекция является датапровайдером компонента. Ну так вот во флексе сделаны коллекции...

GrMerlin
15.04.2010, 23:28
Дело в том, что аналогичным образом я поступаю еще с тремя датагридами... Переменные определенных типов... Датагриду передаются через датапровайдер. Только вот в этом, последнем, возникла проблема... Остальные работают нормально... И только в последнем почему-то mx_internal_uid появляется... Может конечно оно и не при чем, но в работающих вариантах такого нет...

wvxvw
16.04.2010, 00:39
Ну если вы будете спорить с рантайм ошибками, то в итоге победят ошибки :)
Просто вдумчиво еще раз прочитайте сообщение об ошибке.

ЗЫ: Coercion - по-русски "приведение".
Ошибка приведения типов: невозможно преобразовать Object@566b499 в diplomServices.Professor.

GrMerlin
16.04.2010, 13:48
Да никто же с ошибками и не спорит. Да и словарем я пользуюсь:) Просто не могу понять откуда взялось это mx_internal_uid (да, я слабо себе представлю что это такое). Видимо именно из-за него компилятор не может привести переменную к нужному мне типу. Возможно даже вопрос поставить следующим образом: Откуда берется mx_internal_uid и как привести переменную с mx_internal_uid к переменной типу, которая не содержит такого поля. Или как избавиться от mx_internal_uid.

Волгоградец
16.04.2010, 13:59
wvxvw не обманывает, ошибка не должна быть связана с mx_internal_uid. Но уж если хочется от него избавится - нужно поступить так: в Professor (или какой там объект передается) нужно сделать хотя бы одно свойство [Bindable] либо иплементировать IUID интерфейс либо создать свойство uid с каким-нибудь значением.

GrMerlin
16.04.2010, 14:21
Просто кроме как причина ошибки - mx_internal_uid на ум ничего не приходит. Professor содержит поля id, firstName, lastName, serName и определено как Bindable (и класс определен и экземпляр класса). Откуда взялось mx_internal_uid!!!? Или если это не причина ошибки (что тоже возможно. Нужно все проверять), то как мне избавиться от этой ошибки? А вообще откуда оно берется это mx_internal_uid и почему?

Волгоградец
16.04.2010, 14:55
http://livedocs.adobe.com/flex/3/html/help.html?content=Part2_DevApps_1.html

GrMerlin
16.04.2010, 15:29
Ммда... Проблему решил... Оказалось все достаточно глупо... При определении класса в FLEX в ActionScript файле указал описываемый класс один, а alias RemoteClass совершенно другой... Не знаю, как я это не заметил и как оно работало с этой опечаткой... Большое спасибо за помощь и за внимание! Вот выговорился, и все получилось:)