Hi Erik - yup that's what I went with :)

Toby
On 09/04/2007, at 13:41 , Erik Price wrote:



On 4/8/07, Toby Tremayne <[EMAIL PROTECTED]> wrote:
Hi all,
        
I have a method which retrieves an actionscript object, and depending on the value of one of the keys, converts it into an actionscript class. The issue I have is I don't know how to instantiate a class whose name
I can't hard code - can anyone help me with this?

Basically the idea is that if obj.classname = "Page" then I need to write oPage : Page = new Page(); dynamically. Is there any way to do this in actionscript?


You can use the "getDefinitionByName" function to retrieve a reference to a Class, and then you can create an instance of that class using the "new" operator on the Class reference. The following is a very simplistic demonstration of how to instantiate the instances, but in practice you will probably want all of your dynamically-instantiated classes to implement a common interface, and cast the instantiated objects to that interface, so that you don't have to write a bunch of conditionals into your code every time you add a new class:


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
  applicationComplete="appComplete( event );">
  <mx:Script>
    <![CDATA[
      import defaultpckg.MyClass;

      private function appComplete( event : Event ) : void
      {
var classRef : Class = getDefinitionByName ( "defaultpckg.MyClass " ) as Class;
        var myInstance : MyClass = new classRef() as MyClass;
        myInstance.message = "Done";
        myInstance.showMessage();
      }
    ]]>
  </mx:Script>
</mx:Application>


In a separate file, ./defaultpckg/MyClass.as:

package defaultpckg
{

    import mx.controls.Alert;

    public class MyClass
    {
        private var _message : String;

        public function set message( msg : String ) : void
        {
          this._message = msg;
        }

        public function showMessage() : void
        {
          Alert.show ( this._message );
        }
    }
}





-----------------------------------

        Life is poetry, write it in your own words

-----------------------------------

Toby Tremayne
Senior Technical Consultant
Lyricist Software
0416 048 090
ICQ: 13107913


Reply via email to