PXAbstractPlugin // Initialize get fired in each case

2 views
Skip to first unread message

Thomas Pujolle

unread,
Mar 3, 2011, 5:48:11 PM3/3/11
to pixlib
Hi there,

I've found something and I don't know if it's meant to be like this or
not.

Here is a little code:
package
{
import net.pixlib.plugin.PXAbstractPlugin;

public class FakePlugin extends PXAbstractPlugin
{
public function FakePlugin()
{
//super();
}
override protected function initialize():void {
trace("initialize");
super.initialize();
}
}
}

Instanciated here:
package
{
import flash.display.Sprite;

import net.pixlib.core.PXBaseDocument;

public class PixlibTests extends PXBaseDocument
{
public function PixlibTests()
{

}
override protected function onDocumentReady():void {
new FakePlugin();
}
}
}

I get initialize() from the plugin in any case. I cannot "block" it.

The point is, in my whole application, I have many model
initialisation in this initialize function.
Those models get the plugin back using
PXCoreFactory.getInstance().locate();

PXCoreFactory.getInstance().register is used before "initialize" to
guarantee my models will get back to the right plugin.

As initialize seems to be fired even before the plugin registration,
It's weird!

Besides, in PXFrontController, line 103, plugin == null is always
false, even if in my example bellow.

I'm missing something :(

Mike

unread,
Mar 4, 2011, 2:43:39 AM3/4/11
to pixlib
Hi Thomas,


Initialize method is meant for internal plugin initialization purpose
When you say "in PXfrontController..." plugin == null is always false"
this is attended because the plugin is not constructed yet

See initialize source code:
protected function initialize() : void
{
oController = new PXFrontController(this);
oQueueController = new PXQueueController(this);
oModelLocator = PXModelLocator.getInstance(this);
oViewLocator = PXViewLocator.getInstance(this);

oEBPublic =
PXApplicationBroadcaster.getInstance().getChannelDispatcher(channel,
this);
if( oEBPublic ) oEBPublic.addListener(this);
}

Only after internal initialization you may use and setup you plugin
the way you want. In your previous post I said not to forget
initialize plugins using onApplicationInit() dedicated method ;), see:

// Plugin A

/**
* Triggered when IoC process is finished.
*/
override public function onApplicationInit() : void {

initMVC();// initialize your plugin's view, model, frontcontroller
}

// Plugin B

/**
* Triggered when IoC process is finished.
*/
override public function onApplicationInit() : void {

initMVC();// initialize your plugin's view, model, frontcontroller
}




As I understand it you are using kinda main plugin to store/manage
centralized data. In this workflow you may proceed as follow:

public class PixlibTests extends PXBaseDocument
{
override protected function onDocumentReady():void {
var plugin : PluginA = new PluginA();
plugin.onApplicationInit();

// do stuff

var plugin : PluginB = new PluginB();
pluginB.onApplicationInit();
}
}

// OR

public class PixlibTests extends PXBaseDocument
{
override protected function onDocumentReady():void {
var plugin : MainPlugin = new MainPlugin();
plugin.onApplicationInit();

// do stuff

}

public function onStuffComplete() : void
{
var plugin : PluginA = new PluginA();
var plugin : PluginB = new PluginB();

pluginA.onApplicationInit();
pluginB.onApplicationInit();

Thomas Pujolle

unread,
Mar 4, 2011, 4:11:10 AM3/4/11
to pixlib
Sorry for the post, I finally got this sort out a few hours after, it
was mainly a wrong operation order on my side.

Thank you for the support anyway :)
Reply all
Reply to author
Forward
0 new messages