|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Dec 2009
Сообщений: 25
|
старнный эксепшен при использовании CustomItemRenderer
Подскажите где искать проблему, уже всё перерыл....
Структура приложения следующая. Есть основная swf-ка, содержашая основные классы и минимум ресурсов (чтобы грузилась быстрей). В нее динамически через несколько SWFLoader-ов подгружаются отдельные модули. Один из таких модулей - магазин. Основная его часть - это два флексовских контрола: List - список товаров, и TileList - инвентарь пользователя. Для обоих списков созданы свои ItemRenderer-ы: для товара он содержит картинку, описание товара и цену, плюс кнопку "купить", при нажатии на которую на сервер отправляется соотвсетствующая команда. В ответ сервер присылает список элементов инвентаря с учетом купленной вещи. Этот ответ принимается главной swf-кой, которая генерит евент. Модуль "магазин" ловит этот эвент и обновляет инвентарь (создается новый ArrayCollection, заполняется данными и заменяется dataProvider). похоже, что примерно в этот момент вываливается следующее исключение: TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". at mx.utils::LoaderUtil$/normalizeURL()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\utils\LoaderUtil.as:93] at mx.controls::SWFLoader/loadContent()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\controls\SWFLoader.as:1626] at mx.controls::SWFLoader/load()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\controls\SWFLoader.as:1447] at mx.controls::SWFLoader/commitProperties()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\controls\SWFLoader.as:1229] at mx.core::UIComponent/validateProperties()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\core\UIComponent.as:5807] at mx.managers::LayoutManager/validateClient()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:811] at mx.controls.listClasses::TileBase/getPreparedItemRenderer()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\controls\listClasses\TileBase.as:585] at mx.controls.listClasses::TileBase/makeRowsAndColumns()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\controls\listClasses\TileBase.as:409] at mx.controls.listClasses::ListBase/makeRowsAndColumnsWithExtraRows()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\controls\listClasses\ListBase.as:1380] at mx.controls.listClasses::ListBase/updateDisplayList()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\controls\listClasses\ListBase.as:3726] at mx.controls.listClasses::TileBase/updateDisplayList()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\controls\listClasses\TileBase.as:2357] at mx.controls.listClasses::ListBase/validateDisplayList()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\controls\listClasses\ListBase.as:3348] at mx.managers::LayoutManager/validateDisplayList()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:622] at mx.managers::LayoutManager/doPhasedInstantiation()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:695] at Function/http://adobe.com/AS3/2006/builtin::apply() at mx.core::UIComponent/callLaterDispatcher2()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8733] at mx.core::UIComponent/callLaterDispatcher()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8673] Цитата:
|
|
|||||
Регистрация: Dec 2009
Адрес: Москва
Сообщений: 16
|
Запостите хотябы текст виноватого по вашему мнению рендерера. Эксепшн где-то в нутрях валится, поэтому если виноват именно рендерер, значит он неправильно написан =)
Да и вообще, вы уверены в виновности рендерера? Зачем рендереру нужен вдруг метод normalizeURL()? Последний раз редактировалось Elfenit; 01.12.2009 в 17:06. Причина: добавления |
|
|||||
Регистрация: Dec 2009
Сообщений: 25
|
Цитата:
код рендерера, пожалуйста: <?xml version="1.0" encoding="utf-8"?> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" horizontalScrollPolicy="off" verticalScrollPolicy="off" backgroundImage="assets/inventory/cell.png" initialize="init()" mouseOver="showButtons()" mouseOut="hideButtons()" toolTip="_" toolTipCreate="createToolTip(event)" > <mx:Image id="mImage" source="{mImageSource}" /> <mx:Button id="btnUse" x="0" y="0" width="{BUTTON_SIZE}" height="{BUTTON_SIZE}" icon="@Embed(source='../../../../../resources/btn_useitem.png')" toolTip="{resourceManager.getString('strings', 'BTN_USE')}" click="onBtnUseClick()" /> <mx:Button id="btnSell" x="{BUTTON_SIZE + BUTTON_GAP}" y="0" width="{BUTTON_SIZE}" height="{BUTTON_SIZE}" icon="@Embed(source='../../../../../resources/btn_sellitem.png')" toolTip="{resourceManager.getString('strings', 'BTN_SELL')}" click="onBtnSellClick()" /> <mx:TextArea id="lbAmount" x="0" y="{this.height - BUTTON_SIZE}" width="{BUTTON_SIZE}" height="{BUTTON_SIZE}" text="{mAmount}" selectable="false" backgroundColor="#AAAAAA" backgroundAlpha="0.7" fontWeight="bold" color="#0000FF" /> <mx:Script> <![CDATA[ import MiniIT.projects.petwar.net.IModuledServer; import MiniIT.projects.petwar.ui.CustomToolTip; import mx.events.ToolTipEvent; private const BUTTON_SIZE : int = 20; private const BUTTON_GAP : int = 3; // расстояние между кнопками private var mShowUseButton : Boolean = false; private var mShowSellButton : Boolean = false; [Bindable] private var mImageSource : * ; [Bindable] private var mAmount : String; private function init():void { mouseChildren = true; hideButtons(); } override public function set data( value:Object ):void { super.data = value; trace("-- inventory ir set data --", data.type, data.image); switch(data.type) { case "clothing": case "food": case "toy": case "property": case "spystuff": mShowUseButton = true; mShowSellButton = (data.price > 0); break; default: mShowUseButton = false; mShowSellButton = false; toolTip = ""; break; } if (data && data.id >= 0 && data.id != int.MAX_VALUE) { if(data.image) mImageSource = data.image; if (data.amount) mAmount = data.amount.toString(); } else { mImageSource = "/assets/inventory/empty.png"; mAmount = ""; } } private function showButtons():void { btnUse.visible = mShowUseButton; btnSell.visible = mShowSellButton; } private function hideButtons():void { btnUse.visible = false; btnSell.visible = false; } private function createToolTip(event:ToolTipEvent) : void { if (data && data.name) { var tip : InventoryToolTip = new InventoryToolTip(); tip.data = data; event.toolTip = tip; } } private function onBtnUseClick():void { Global.server.activateItem(data.id); } private function onBtnSellClick():void { Global.server.shop.sell(data.id); } ]]> </mx:Script> </mx:Canvas> |
|
|||||
Регистрация: Dec 2009
Адрес: Москва
Сообщений: 16
|
в set data самой первой строчкой припишите
if (!data) return; Или вставьте везде проверки на не налл дату. А то вот такая проверка if (data && data.id >= 0 && data.id != int.MAX_VALUE) выглядит довольно глупо после уже неоднократного обращения к полям data. Дальше посмотрим. Кстати, не увидел в коде нормалайза никакого. Плюс, какую SDK вы используете для сборки? В 3.4 в этой LoaderUtil.as:93 строке не содержится опасных операций + 3.4 не выдает ошибок на русском, как я знаю. Последний раз редактировалось Elfenit; 01.12.2009 в 18:52. |
|
|||||
Регистрация: Dec 2009
Сообщений: 25
|
Цитата:
Цитата:
Цитата:
|
|
|||||
Регистрация: Dec 2009
Адрес: Москва
Сообщений: 16
|
Ну ок. Так что-то изменилось после такого изменения кода?
|
|
|||||
Регистрация: Dec 2009
Сообщений: 25
|
нет, ничего не изменилось
|
|
|||||
Modus ponens
|
>> какую SDK вы используете для сборки?
3.4.1.10084 Чего-то не срастается... ... autobuild\3.4.0\frameworks... Да и скорее всего что-то с настройками загрузки RSL - в ваших модулях, скорее всего что етот рендерер тут ни при чем.
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Dec 2009
Адрес: Москва
Сообщений: 16
|
<mx:Image id="mImage" source="{mImageSource}" />
По-моему, так нельзя. http://www.adobe.com/livedocs/flex/3...ols/Image.html Больше существенных нареканий к этому коду кроме архитектуры у меня нет. Если исправление или временное отключение этого участка не поможет, я бы стал искать проблему где-то вокруг. |
|
|||||
Регистрация: Dec 2009
Сообщений: 25
|
Цитата:
я вообще удалил старую версию (3.4.0), заменил ее новой и перекомпилил, но сообщения об ошибке те же Цитата:
Добавлено через 2 минуты Цитата:
Цитата:
|
Часовой пояс GMT +4, время: 00:29. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|