2012-10-17 64 views
2

我正在嘗試調用模塊的函數(具有兩個參數)併爲其分配值。 我可以看到在跟蹤中分配的值,但分配給標籤時不顯示相同的值。在標籤中,值不顯示在模塊中使用哪個

  1. 如果我直接給標籤賦值。它說:

    Error:1009: Null object Reference

  2. 如果我使用[Bindable] meta標籤到那個標籤,它不會顯示任何運行時錯誤,但也沒有顯示的值。我搜索了互聯網,發現[Bindable] meta標籤用作嘗試並抓取博客。

如何獲得值顯示分配給標籤?

Main.mxml 

<?xml version="1.0" encoding="utf-8"?> 
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:custom="com.custom.*" xmlns:local="*" creationComplete="onload()"> 
    <mx:Script> 
<![CDATA[ 
    import modules.AModule; 
    import mx.events.ModuleEvent; 
    import mx.containers.VBox; 
    import mx.containers.TitleWindow; 
    import mx.controls.TextInput; 
    import mx.controls.Button; 
    import mx.containers.HBox; 
    import mx.controls.Label; 
    import mx.events.CloseEvent; 
    import mx.controls.Text; 
    import com.custom.CustomAlert; 
    import mx.controls.Alert; 
    import mx.containers.Canvas; 
    import mx.events.ItemClickEvent; 

    import mx.core.UIComponent; 

    import mx.modules.ModuleManager; 
    import mx.modules.IModuleInfo; 
    import mx.containers.Box; 
    import mx.controls.ProgressBar; 

    //private var can:Canvas; 

    public var titlewin:TitleWindow = new TitleWindow(); 
     public var usern:TextInput = new TextInput(); 
     public var passw:TextInput = new TextInput(); 
     public var vb:VBox = new VBox(); 
     public var hb1:HBox = new HBox(); 
     public var hb2:HBox = new HBox(); 
     public var hb3:HBox = new HBox(); 
     public var nc:NetConnection; 

     public var bt1:Button = new Button(); 

     private var pb:ProgressBar; 
    private var progressContainer:Box; 
    private var info:IModuleInfo; 
    private var module:UIComponent = null; 
    public var can:Canvas= new Canvas(); 
    public function onload():void 
    { 
      var label1:Label= new Label(); 
     var label2:Label= new Label(); 
     label1.text="Username"; 
     label2.text="Password "; 
     hb1.addChild(label1); 
     hb1.addChild(usern); 
     hb2.addChild(label2); 
     hb2.addChild(passw); 
     vb.addChild(hb1); 
     vb.addChild(hb2);   
     bt1.label="Sign In"; 
     hb3.addChild(vb); 
     hb3.addChild(bt1); 
     titlewin.addChild(hb3); 

     //Title Window creation starts here 
     titlewin.title="Login"; 

     titlewin.setStyle("paddingLeft",20); 
     titlewin.setStyle("paddingRight",20); 
     titlewin.setStyle("paddingTop",20); 
     titlewin.setStyle("paddingBottom",20); 
     titlewin.setStyle("borderThicknessBottom",0); 
     titlewin.setStyle("borderThicknessLeft",0); 
     titlewin.setStyle("borderThicknessRight",0); 
     titlewin.setStyle("borderThicknessTop",0); 
     titlewin.setStyle("cornerRadius",0); 
     titlewin.setStyle("borderColor","#D20101"); 
     this.addChild(titlewin); 
     viewStack.enabled=false; 
     ctbb.enabled=false; 
     bt1.addEventListener(MouseEvent.CLICK, netconn); 

    } 

    private function onclick():void 
    { 
     if(usern.text!="") 
     { 
    this.removeChild(titlewin); 
    viewStack.enabled=true; 
    ctbb.enabled=true; 
    username.text=usern.text; 
     } 
     else 
     { 
      Alert.show("Please enter Username"); 
     } 
    } 


    private function netconn(event:MouseEvent):void 
    { 
     nc = new NetConnection(); 
     nc.connect("rtmp://localhost/loginhere",usern.text); 
     nc.addEventListener(NetStatusEvent.NET_STATUS, onstatushandler); 

    } 

    private function onstatushandler(event:NetStatusEvent):void 
    { 
     if(event.info.code=="NetConnection.Connect.Success") 
     { 
      status.text="Connected"; 
     onclick(); 
      } 


     if(event.info.code=="NetConnection.Connect.Rejected") 
     { 
      status.text="Rejected"; 
     } 
     if(event.info.code=="NetConnection.Connect.Failed") 
     { 
       status.text="Failed"; 
     } 
    } 



    private function JoinClick(event:MouseEvent):void{ 

     if(viewStack.numChildren==3) 
     { 
      Alert.show("You Cant Add More Button","Alert"); 

     } 

     if(viewStack.numChildren<3) 
     { 

     if(viewStack.numChildren<2) 
     { 
     can.label="Button2"; 
     var button1:CustomButton= new CustomButton(); 
     button1.label="Leave Table"; 
     button1.x=300; 
     button1.y=200; 
     var txt:Text = new Text(); 
     txt.text=can.label; 
     txt.x=50; 
     txt.y=50; 
     button1.addEventListener(MouseEvent.CLICK,remove2); 
     can.addChild(button1); 
     can.addChild(txt); 
     loadmodule(); 
     } 
     else 
     { 

     can.label="Button3"; 
     var button2:CustomButton= new CustomButton(); 
     button2.label="Leave Table"; 
     button2.x=300; 
     button2.y=200; 
     button2.addEventListener(MouseEvent.CLICK,remove3); 
     can.addChild(button2); 
     var txt1:Text = new Text(); 
     txt1.text=can.label; 
     txt1.x=50; 
     txt1.y=50; 
     can.addChild(txt1); 
     } 
     can.setStyle("backgroundColor","0x5EA5BA"); 
     viewStack.addChild(can); 
     if(viewStack.numChildren>2) 
     { 
      viewStack.selectedIndex=2; 
     } 
     else 
     { 
     viewStack.selectedIndex=1; 
     } 
     } 

     } 


     private function remove2(event:MouseEvent):void{ 
     Alert.show("Do you want to Leave Table?","Confirmation",Alert.YES|Alert.NO,this,closeAlert2); 
     } 
     private function closeAlert2(event:CloseEvent):void{ 
     if(event.detail==Alert.YES) 
     { 
     viewStack.removeChildAt(1); 
     } 

     } 
     private function remove3(event:MouseEvent):void{ 
     if(viewStack.numChildren>2) 
     { 
      Alert.show("Do You want to leave Table?","Confirmation",Alert.YES|Alert.NO,this,closeAlert3); 

     } 
     else 
     { 
      Alert.show("Do you want to Leave Table?","Confirmation",Alert.YES|Alert.NO,this,closeAlert1); 

     } 
     } 

     private function closeAlert1(event:CloseEvent):void{ 
      if(event.detail==Alert.YES) 
      { 
       viewStack.removeChildAt(1); 

      } 
     } 
     private function closeAlert3(event:CloseEvent):void{ 
      if(event.detail==Alert.YES) 
      { 
        viewStack.removeChildAt(2); 
      } 
     } 


      private function loadmodule():void 
    { 
      pb = new ProgressBar(); 
      pb.labelPlacement = "center"; 
      pb.label = "Loading %3 %"; 
      progressContainer = new Box(); 
      progressContainer.percentWidth = 100; 
      progressContainer.percentHeight = 100; 
      progressContainer.setStyle("horizontalAlign", "center"); 
      progressContainer.setStyle("verticalAlign", "middle"); 
      progressContainer.addChild(pb); 
      can.addChild(progressContainer); 


     var moduleUrl:String="../bin-debug/modules/useModule.swf"; 
     info=ModuleManager.getModule(moduleUrl); 
     if(info!=null) 
     { 
      info.addEventListener(ModuleEvent.READY, modEventHandler); 
      info.addEventListener(ModuleEvent.ERROR,modErrorHandler); 
      info.load(); 
     } 
    } 



    private function modEventHandler(e:ModuleEvent):void 
    { 
     info.removeEventListener(ModuleEvent.READY, modEventHandler); 
     info.removeEventListener(ModuleEvent.ERROR, modErrorHandler); 
     can.removeAllChildren(); 
     if(module==null) 
     { 

      module = info.factory.create() as UIComponent; 
      if(module!=null) 
      { 
       module.x=0; 
       module.y=0; 
       module.percentWidth=100; 
       module.percentHeight=100; 
       can.addChild(module); 
       if(module is AModule) 
       { 

       } 
      } 
     } 
     } 

      private function modErrorHandler(event:ModuleEvent):void { 


      //cleanup and display an error alert 
      info.removeEventListener(ModuleEvent.READY, modEventHandler); 
      info.removeEventListener(ModuleEvent.ERROR, modErrorHandler); 
      info = null; 
      Alert.show(event.toString(), "Error Loading Module"); 

      unloadModule(); 
     } 
       private function unloadModule():void 
       { 
      can.removeAllChildren(); 
      if (module != null && info != null) { 
       info.addEventListener(ModuleEvent.UNLOAD, unloadEventHandler); 
       info.unload(); 
      } 
     } 

       private function unloadEventHandler(e:ModuleEvent):void 
       { 
      info.removeEventListener(ModuleEvent.UNLOAD, unloadEventHandler); 
      module = null; 
      info = null; 
       } 


]]> 
    </mx:Script> 

<mx:Canvas width="700" height="400" x="166" y="32"> 
<mx:ViewStack id="viewStack" width="100%" height="100%"> 
    <mx:Canvas label="Button1" backgroundColor="#5EA5BA" visible="true" id="can1" > 
    <local:CustomButton label="Join" click="JoinClick(event)" x="536" y="222"/> 
    <mx:Label x="304" y="120" text="Label" id="username"/> 
    <mx:Label x="304" y="55" text="Label" id="status"/> 
    </mx:Canvas> 
</mx:ViewStack> 

</mx:Canvas> 
    <custom:CustomControlBar x="166" y="423" id="ctbb"> 
    <custom:CustomToggleButtonBar dataProvider="viewStack"/> 
    </custom:CustomControlBar> 

    </mx:Application> 

useModule.mxml

<?xml version="1.0" encoding="utf-8"?> 
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="508" height="218" implements="modules.AModule" backgroundColor="#F00F0F" creationComplete="addlabel();"> 
<mx:Script> 
    <![CDATA[ 
     import mx.core.Application; 

     public var logsin:loginhere = new loginhere(); 
     public function addlabel():void 
     { 
      lb1.text=logsin.username.text; 
      txt3.text=logsin.username.text; 
      trace(txt3.text); 
      trace(lb1.text); 
     } 


    ]]> 
</mx:Script> 

    <mx:TextInput id="txt3" x="30.5" y="10" width="79"/> 
    <mx:Label id="lb1" x="31.5" y="40" width="78" text="Will it Change?"/> 
</mx:Module> 

AModule.as(它的一個接口)

package modules 
{ 
import flash.events.IEventDispatcher; 

public interface AModule extends IEventDispatcher 
{ 
    function addlabel():void; 
} 
} 
+1

請向我們展示您使用的代碼 - 這將使我們更容易提供幫助。 – JcFx

+0

感謝您的回覆。 它太複雜了,因爲代碼從服務器獲取數據並執行其餘的操作。你能幫我一些例子,如 我需要將值傳遞給模塊中的一個函數(有兩個參數)從一個主文件並加載模塊。謝謝 – user1647017

+0

對不起@JcFx,我已經更新了我的問題,請讓我知道,如果你知道我的問題。謝謝 – user1647017

回答

0

我沒有經歷過整個代碼看了看,但是有一兩件事我注意到的是你應將值作爲參數傳遞給子組件,並使用數據綁定來動態更新參數。

所以在AModule.as:

<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="508" height="218" implements="modules.AModule" backgroundColor="#F00F0F" creationComplete="addlabel();"> 
<mx:Script> 
    <![CDATA[ 
     import mx.core.Application; 

     public var logsin:loginhere = new loginhere(); 

     [Bindable] 
     public var username:String = ""; 
    ]]> 
</mx:Script> 

    <mx:TextInput id="txt3" text="{username}" x="30.5" y="10" width="79"/> 
    <mx:Label id="lb1" text="{username}" x="31.5" y="40" width="78" text="Will it Change?"/> 
</mx:Module> 

在您創建的模塊,您可以那麼方法:

module.username = //var that holds username; 
+0

我錯過點是,我力創建一個變種爲interace 的變種應
'modEventHandler'函數創建
在該函數的下面線應添加
'ICHILD =模塊作爲AModule; ichild.addlabel(tt.text);' 所以模塊被調用並且值顯示在標籤字段中。 請讓我知道,如果它錯誤的工作方式。 – user1647017

0

我錯過了,我不力在創建接口實例的點main.mxml var應創建modEventHandler函數在該函數中應添加以下行

ichild=module as AModule; 

ichild.addlabel(tt.text); 

所以模塊被調用並且值顯示在標籤字段中。

請讓我知道,如果它錯誤的工作方式。謝謝