2011-05-27 39 views
0

我正在嘗試編寫一個簡單的多核PureMVC helloword。我得到錯誤:此Notifier的multitonKey尚未初始化!Flex MultiCore PureMVC通知程序初始化錯誤

at org.puremvc.as3.multicore.patterns.observer::Notifier/get facade()[C:\ Documents and Settings \ Owner.CapricornOne \ My Documents \ My Workspaces \ PureMVC \ PureMVC_AS3_MultiCore \ src \ org \ puremvc \ as3 \ multicore \ patterns \ observer \ Notifier.as:89] at com.jacksutest.view :: ApplicationMediator()[C:\ myworkspace \ MyPureMVC \ src \ com \ jacksutest \ view \ ApplicationMediator.as:15]

這裏是主MXML:

public static const APP_NAME : String = "MyPureMVC"; 
private var facade : ApplicationFacade = ApplicationFacade.getInstance(APP_NAME); 
public function init() : void 
{ 
facade.startup(this); 
} 

...
<組件:WordForm ID = 「theWordForm」/ >

這是ApplicationFacade。 public class ApplicationFacade extends Facade實現IFacade {0} {0} {0} public static const STARTUP:String =「Startup」; public static const VERIFY_WORD:String =「VerifyWord」;

public function ApplicationFacade(key:String) 
    { 
     super(key); 
    } 

    public static function removeInstance(key:String):void 
    { 
     if(null != instanceMap) 
     { 
      if(null != instanceMap[key]) 
      { 
       delete instanceMap[key]; 
      } 
     } 
    } 

    /** 
    * Singleton ApplicationFacade Factory Method 
    */ 
    public static function getInstance(key:String):ApplicationFacade 
    { 
     if (null == instanceMap[key]) 
     { 
      instanceMap[key] = new ApplicationFacade(key); 
     } 
     return instanceMap[key] as ApplicationFacade; 
    } 

    /** 
    * Register Commands with the Controller 
    */ 
    override protected function initializeController():void 
    { 
     super.initializeController(); 
     registerCommand(STARTUP,  StartupCommand); 
     registerCommand(VERIFY_WORD, VerifyWordCommand); 
    } 

    public function startup(app : MyPureMVC):void 
    { 
     trace("In facade startup"); 
     sendNotification(STARTUP, app); 
    } 

    public function verifyWord(wordDTO : WordDTO) : void 
    { 
     sendNotification(VERIFY_WORD, wordDTO); 
    } 
} 

}

這是啓動命令

public class StartupCommand extends MacroCommand 
{ 
    public function StartupCommand() 
    { 
    trace("Startup command created"); 
     addSubCommand(ModelPrepCommand); 
     addSubCommand(ViewPrepCommand); 
    } 
} 

這是ViewPrepCommand

public class ViewPrepCommand extends SimpleCommand 
{ 
    override public function execute(note : INotification) : void 
    { 
     var app : MyPureMVC = note.getBody() as MyPureMVC; 

     facade.registerMediator(new ApplicationMediator(app)); 
    } 
} 

這是ApplicationMediator:

public class ApplicationMediator extends Mediator implements IMediator 
{ 
    public static const NAME : String = "MyPureMVCApplicationMediator"; 
    public function ApplicationMediator(mainApp : MyPureMVC) 
    { 

     facade.registerMediator(new WordFormMediator(mainApp.theWordForm)); 
    } 

當facade.registerMediator發生錯誤。

回答

1

找到問題。我不應該在ApplicationMediator的構造函數中引用facade。

相反,我應該在onRegister方法中調用facade.registerMediator。

public static const NAME : String = "MyPureMVCApplicationMediator"; 
    public function ApplicationMediator(viewComponent : MyPureMVC) 
    { 
     super(NAME, viewComponent); 
    } 
    override public function onRegister():void 
    { 
     // Retrieve reference to frequently consulted Proxies 
     facade.registerMediator(new WordFormMediator(mainApp.theWordForm)); 
    } 

    public function get mainApp() : MyPureMVC 
    { 
     return viewComponent as MyPureMVC; 
    } 
+0

+ +1對於發佈解決方案,一旦你解決了;) – dain 2011-05-28 13:01:08