![]() |
Инициализация AdvancedDataGrid
Здравствуйте! Помогите, пожалуйста, разобраться в проблеме!
Есть приложение Flex SDK 3.5, есть экземпляр mx:TitleWindow добавляемый на сцену методом PopUpManager.createPopUp, в этом TitleWindow есть экземпляр mx:AdvancedDataGrid. По событию creationComplete TitleWindow, программно задаётся структура AdvancedDataGrid, десериализируется объект Array и задаётся в качестве источника данных для этого AdvancedDataGrid. Проблема: при выполнении этой процедуры, часто появляется runtime-ошибка: TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". at mx.controls::AdvancedDataGrid/findHeaderRenderer()[C:\work\flex\dmv_automation\projects\datavisualisation\src\mx\controls\AdvancedDataGrid.as:1352] at mx.controls::AdvancedDataGrid/mouseEventToItemRenderer()[C:\work\flex\dmv_automation\projects\datavisualisation\src\mx\controls\AdvancedDataGrid.as:1317] at mx.controls.listClasses::AdvancedListBase/mouseMoveHandler()[C:\work\flex\dmv_automation\projects\datavisualisation\src\mx\controls\listClasses\AdvancedListBase.as:8085] В чём может быть проблема? Может десериализация источника данных занимает много времени и в момент инициализации AdvancedDataGrid объект dataProvider ещё не готов? Как отследить момент готовности объекта sourse? Что вообще происходит? Вот код всего компонента: Код AS3:
|
Возможно есть смысл поэксперементировать с порядком инициализации, т.е. провайдер после колонок, или наоборот и т.п. Но ADG дрянь та еще... я в итоге сдался искать и разбираться, если что-то такое случается - просто наследую класс от ADG и в нем переопределяю функцию которая себя "плохо ведет". У этих ошибок, как правило, нет логического объяснения, просто исходный код очень низкого качества, и, естесственно, ошибки случаются.
|
Цитата:
|
Вызывайте componentCompleteHandler в creationComplete самого грида. Остальной код очень жуткий.
|
Боритесь с причиной, а не последствиями. Ошибка у вас возникает, после того как мышка оказывается над гридом. Попробуйте в начале метода componentCompleteHandler поставить viewDG.endbled = false, в конце true.
P.S. Вы в этой каше, сами хоть ориентируетесь? |
Цитата:
Цитата:
|
Я имел ввиду такие конструкции Application.application.DataGrid1.selectedItem.STOLBEC, Application.application.stage.width-40 и т.д.
|
Насчёт Application.application.stage==stage согласен. stage она и в IFlexDisplayObject stage. А какая практика лучшая для обращения к объекту расположенному в Application.application?
|
Не должно быть такой практики. Дети не должны знать, что внутри их родителей, передавайте необходимые данные при вызове объекта, также и с размерами. PopUpManager.createPopUp возвращает созданный объект. Ссылку на root можно получить через systemManager.getSandboxRoot(), а уже у него можно получить stage.
|
Правильно-ли я понял, что вложенные классы должны содержать собственные свойства-переменные со значением ссылок на объекты других классов?
Чем вызвана необходимость в дополнительных строках кода? ...Впрочем один аргумент я уже открыл для себя: при Вашем подходе ошибка указанная в начале темы исчезла. Чуть раньше я её латал таймером, который с запаздыванием присваивал значение AdvancedDataGrid.enabled=true Хотя, как по мне, визуализация инициализации AdvancedDataGrid раньше была лучше: появлялся пустой AdvancedDataGrid, через долю секунды его содержимое, теперь: появляется AdvancedDataGrid с двумя заполненными колонками, затем через долю секунды AdvancedDataGrid приобретает окончательный вид. Может надо ещё поработать... |
| Часовой пояс GMT +4, время: 17:52. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.