![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Dec 2009
Сообщений: 25
|
Подскажите где искать проблему, уже всё перерыл....
Структура приложения следующая. Есть основная 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, время: 21:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|