Domanda

Nel tentativo di organizzare il mio codice, sto cercando di dividere il mio (lunga) principale classe controller in file separati, ma i miei nuovi file deve comunque avere accesso alle variabili e funzioni di la classe controller principale.

Sto cercando di tagliare e incollare il codice della mia classe controller in un nuovo / file di classe, che consente la classe controller di chiamare la nuova classe, e consentendo la nuova classe di avere accesso a proprietà e la funzione della classe controller.

Supponendo che non sono totalmente contundenti modelli di progettazione appropriate, di seguito è il mio tentativo non riuscito a realizzare questo compito:

package
{   
import flash.display.Sprite;
import flash.events.Event;

public class Test extends Sprite
    {
    public var myString:String;

    public function Test()
        {
        if  (stage)
            init(null);
            else
            addEventListener(Event.ADDED_TO_STAGE, init);
        }

    private function init(evt:Event):void
        {
        if  (hasEventListener(Event.ADDED_TO_STAGE))
            removeEventListener(Event.ADDED_TO_STAGE, init);

/////////////// MOVE COMMENTED CODE TO NEW FILE ///////////////////////
//      
//      //Assign The String A Value
//      myString = "Hello world";
//      
//      //Draw A Blue Square
//      var sq:Sprite = new Sprite();
//      sq.graphics.beginFill(0x0000FF);
//      sq.graphics.drawRect(10, 10, 100, 100);
//      sq.graphics.endFill();
//      super.addChild(sq);
//      
//      //Call Tracer Function
//      tracer();
//
//////////////////////////////////////////////////////////////////////

        //Call pasted method in NewFile.as
        NewFile.myNewFunction();     // <- this doesn't work
        }

    public function tracer():void
        {
        trace(myString);
        }
    }
}

nuovo file non ha accesso alla classe Controller - non funziona. come posso scrivere il nuovo file in modo che esso ha accesso alle proprietà, funzioni, stage, ecc della classe Controller, come se il suo codice non è mai stato rimosso ed è ancora al suo posto originale.

package
{   
public class NewFile
    {
    public static function myNewFuntion():void
        {
        //Assign The String A Value
        myString = "Hello world";

        //Draw A Blue Square
        var sq:Sprite = new Sprite();
        sq.graphics.beginFill(0x0000FF);
        sq.graphics.drawRect(10, 10, 100, 100);
        sq.graphics.endFill();
        super.addChild(sq);

        //Call Tracer Function
        tracer();
        }
    }
}
È stato utile?

Soluzione

public class MainClass extends Sprite
{
    private var subClass:SubClass;

    public function MainClass
    {
       var controller:Controller = new Controller();

       subClass = new SubClass(controller);
       addChild( subClass );
    }

    private function init():void
    {
       subClass.doWhatever();
    }
}

public class Controller
{

    public function doThis():void
    {
     }
    public function doThat():void
    {
         trace("controller do that...");
     }
    public function doSomethingElse():void
    {
     }
}

public class Subclass extends Sprite
{
     private var controller:Controller;

     public function Subclass(controller:Controller)
     {
         this.controller = controller;
         trace( "new Subclass instance!" );
     }

     public function doWhatever():void
     {
         controller.doThat();
     }
}

Altri suggerimenti

Questo codice

//Call Tracer Function 
tracer(); 

non sta andando al lavoro, in quanto tracciante non è un metodo statico.

Questa:

super.addChild(sq);

non funziona neanche, dal momento che NewFile non eredita tutte le classi; super() chiama il metodo homonyme della classe madre in una relazione eredità. Che cosa si dovrebbe fare non è più probabilmente una relazione COMPOSIZIONE o AGGREGAZIONE: newFile non è un controller, ma controllore ha un newFile

.

E 'difficile sapere esattamente ciò che è sbagliato se non ci danno un messaggio di errore.

Sotto l'aspetto di design, sono d'accordo con Patrizio. Si potrebbe voler controllare il composite, che potrebbe essere quello che ti serve lì.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top