tschneidereit/SwiftSuspenders

getDefinition failing with loaded swf

Matan opened this issue · 2 comments

I've built a website framework (HandBones) that compiles multiple swfs from an application. There is a main swf and page swfs, the pages each mimic a new context, but in actual fact is a view that is being mediated in the background. This all works fine, but with the new version of Robotlegs and SwiftSuspenders the views inside the pages are not mediating.

This stack might look very complex but all that is happening is that the website is navigating to a page called HelloWorld and it's only got one view component called HelloWorldCanvas with mediator HelloWorldCanvasMediator.


Exception fault: ReferenceError: Error #1065: Variable HelloWorldCanvas is not defined.
    at flash.system::ApplicationDomain/getDefinition()
    at org.swiftsuspenders.injectionpoints::PropertyInjectionPoint/initializeInjection()[/Users/tschneidereit/dev/swiftsuspenders/swiftsuspenders/src/org/swiftsuspenders/injectionpoints/PropertyInjectionPoint.as:58]
    at org.swiftsuspenders.injectionpoints::InjectionPoint()[/Users/tschneidereit/dev/swiftsuspenders/swiftsuspenders/src/org/swiftsuspenders/injectionpoints/InjectionPoint.as:19]
    at org.swiftsuspenders.injectionpoints::PropertyInjectionPoint()[/Users/tschneidereit/dev/swiftsuspenders/swiftsuspenders/src/org/swiftsuspenders/injectionpoints/PropertyInjectionPoint.as:31]
    at org.swiftsuspenders::Injector/getInjectionPoints()[/Users/tschneidereit/dev/swiftsuspenders/swiftsuspenders/src/org/swiftsuspenders/Injector.as:271]
    at org.swiftsuspenders::Injector/instantiate()[/Users/tschneidereit/dev/swiftsuspenders/swiftsuspenders/src/org/swiftsuspenders/Injector.as:130]
    at org.robotlegs.base::MediatorMap/createMediator()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/base/MediatorMap.as:146]
    at org.robotlegs.base::MediatorMap/onViewAdded()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/base/MediatorMap.as:263]
    at flash.display::DisplayObjectContainer/addChild()
    at org.handbones.samples.site.pages.helloworld.controller::HelloWorldStartupCompleteCommand/execute()[D:\Work\HandBones-Samples\src\org\handbones\samples\site\pages\helloworld\controller\HelloWorldStartupCompleteCommand.as:17]
    at org.robotlegs.base::CommandMap/execute()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/base/CommandMap.as:175]
    at org.robotlegs.base::CommandMap/routeEventToCommand()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/base/CommandMap.as:225]
    at Function/()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/base/CommandMap.as:100]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at org.handbones.base::Page/dispatch()[D:\Work\HandBones\src\org\handbones\base\Page.as:115]
    at org.handbones.base::Page/startup()[D:\Work\HandBones\src\org\handbones\base\Page.as:45]
    at org.handbones.samples.site.pages::HelloWorldPage/startup()[D:\Work\HandBones-Samples\src\org\handbones\samples\site\pages\HelloWorldPage.as:20]
    at org.handbones.base::PageMediator/onRegister()[D:\Work\HandBones\src\org\handbones\base\PageMediator.as:23]
    at org.robotlegs.base::MediatorBase/preRegister()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/base/MediatorBase.as:76]
    at org.handbones.base::PageMediator/preRegister()[D:\Work\HandBones\src\org\handbones\base\PageMediator.as:18]
    at org.robotlegs.base::MediatorMap/registerMediator()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/base/MediatorMap.as:163]
    at org.robotlegs.base::MediatorMap/createMediator()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/base/MediatorMap.as:148]
    at org.robotlegs.base::MediatorMap/onViewAdded()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/base/MediatorMap.as:263]
    at flash.display::DisplayObjectContainer/addChildAt()
    at org.handbones.samples.site.view::PageContainer/show()[D:\Work\HandBones-Samples\src\org\handbones\samples\site\view\PageContainer.as:70]
    at org.handbones.samples.site.view::PageContainerMediator/pageChange_handler()[D:\Work\HandBones-Samples\src\org\handbones\samples\site\view\PageContainerMediator.as:43]
    at org.robotlegs.base::EventMap/routeEventToListener()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/base/EventMap.as:181]
    at Function/()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/base/EventMap.as:107]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at org.robotlegs.mvcs::Actor/dispatch()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/mvcs/Actor.as:98]
    at org.handbones.base::Navigator/dispatchNavigatorEvent()[D:\Work\HandBones\src\org\handbones\base\Navigator.as:126]
    at org.handbones.base::Navigator/navigateToPage()[D:\Work\HandBones\src\org\handbones\base\Navigator.as:108]
    at org.handbones.base::Navigator/swfAddress_change_handler()[D:\Work\HandBones\src\org\handbones\base\Navigator.as:155]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at com.asual.address::SWFAddress$/_dispatchEvent()[D:\Work\AS3Library\src\com\asual\address\SWFAddress.as:144]
    at com.asual.address::SWFAddress$/setValue()[D:\Work\AS3Library\src\com\asual\address\SWFAddress.as:398]
    at org.handbones.base::Navigator/setAddress()[D:\Work\HandBones\src\org\handbones\base\Navigator.as:61]
    at org.handbones.base::Navigator/gotoPageId()[D:\Work\HandBones\src\org\handbones\base\Navigator.as:47]
    at org.handbones.controller::ExecuteActionCommand/execute()[D:\Work\HandBones\src\org\handbones\controller\ExecuteActionCommand.as:43]
    at org.robotlegs.base::CommandMap/execute()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/base/CommandMap.as:175]
    at org.robotlegs.base::CommandMap/routeEventToCommand()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/base/CommandMap.as:225]
    at Function/()[/Users/shaun/Documents/Development/Workspaces/GanymedeFB4/robotlegs-framework/src/org/robotlegs/base/CommandMap.as:100]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at org.handbones.base::ActionMap/dispatch()[D:\Work\HandBones\src\org\handbones\base\ActionMap.as:121]
    at org.handbones.base::ActionMap/executeAction()[D:\Work\HandBones\src\org\handbones\base\ActionMap.as:99]
    at Function/()[D:\Work\HandBones\src\org\handbones\base\ActionMap.as:41]

Like I said, this was working in the previous versions and I can't seem to find the problem.

I've checked that the MediatorMap has the correct mapping.
I've tried to pass the current application domain to loaded swf.
I've checked that all injection are satisfied.

I've have two source bundles one with RL-v1.0.3 and one with RL-v1.1.1. Just let me know, I can send them over.

Any advice would be great, I'm really stuck here.
Thanks!

My bad! Passing the current application domain works! I built a very small example of the problem and tried passing the current domain and it worked. Turns out I had a little bug with my AssetLoader library - the LOADER_CONTEXT parameter was being overwritten. But for anyone else encountering this problem the solution is easy.

Normal way:


_loader.load(new URLRequest("someName.swf"), new LoaderContext(false, ApplicationDomain.currentDomain));

AssetLoader way:


assetLoader.addLazy("SOME_ID", "someName.swf", AssetType.SWF, new Param(Param.LOADER_CONTEXT, new LoaderContext(false, ApplicationDomain.currentDomain)));

Closing as a non-issue