In the label, the value is not displayed which is used in the module

advertisements

I am trying to call a function (having two parameters) of module and assign values to it. I can see the value being assigned in trace, but the same value is not displaying when it is assigned to label.

  1. If I directly assign the value to label. It says:

    Error:1009: Null object Reference

  2. If I use [Bindable] meta tag to that label, it won't show any runtime error but the value is also not displayed. I have searched the internet and found that the [Bindable] meta tag works as try and catch blog.

How to get value display assign to label?

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 (Its an interface)

package modules
{
import flash.events.IEventDispatcher;

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


I haven't looked through the entire code, but one thing I noticed is that you should pass the values on as parameters to the child components and use data binding to dynamically update parameters.

So in 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>

In the method where you create the module you can then:

module.username = //var that holds username;