Avatar billede neo_bill Nybegynder
20. oktober 2005 - 20:31 Der er 7 kommentarer og
1 løsning

Funktion i funktion

Hej Flashere,

Jeg har lavet mig en lille class til data-kommunikations styring. I den er der en funktion der forbinder til min XMLSocket, eksempelvis:
class Socket{
public function doConnect():Boolean{
var Socket:XMLSocket = new XMLSocket();
Socket.onConnect = ???????????
Socket.connect(ip, port);
}
}

Her er så problemet (Markeret med "???????") at jeg gerne vil have denne event ud til når jeg bruger min class. Eksempelvis:

var Data:Socket = new Socket();
Data.onConnect = ?????
Data.doConnect();


På forhånd tak!
Avatar billede barklund Nybegynder
20. oktober 2005 - 21:23 #1
Klassisk brug af delegate - dog vil du nok gerne have XMLSocket-instansen som egenskab på klassen:

class Socket {
  public var onConnect:Function;
  private var socket:XMLSocket
  public function doConnect(ip:String, port:Number):Boolean{
    socket:XMLSocket = new XMLSocket();
    socket.onConnect = mx.utils.Delegate.create(this, onConnect);
    return socket.connect(ip, port);
  }
}

Noget i den stil :)

--
Morten Barklund
Avatar billede neo_bill Nybegynder
20. oktober 2005 - 22:19 #2
Hej!
Tusind tak for hjælpen, men min kode accepterer det ikke umiddelbart. Som du kan se har jeg en sådan class:
class Socket
{
    public var conStatus:Function;
    private var _host : String = "#.#.#.#";
    private var _port : Number = 1337;
    private var _socket : XMLSocket;

    public function Socket ()
    {
        _socket = new XMLSocket ();
        _socket.onConnect = mx.utils.Delegate.create(this, conStatus);
    }
    public function doConnect () : Boolean
    {
        _socket.connect (_host, _port);
    }
}

Og så har jeg en swf med denne kode:

stop();
var Socket:Socket = new Socket();
Socket.conStatus = function(e){
    if(e){
        trace("Ping");
    } else {
        trace("Pong");
    }
}
Socket.doConnect();

Er der noget galt?
Avatar billede barklund Nybegynder
20. oktober 2005 - 22:29 #3
Altså, det er lidt noget hat at kalde din variabel det samme som klassen - det kan kun give rod!

Men derudover kan jeg ikke lige se, at der skulle være noget galt. Hvad sker der, hvis du bare giver en almindelig anonym funktion som handler?

_socket.onConnect = function(e){trace("succes:"+e);};

Bare lige at debugging-årsager :)

--
Morten Barklund
Avatar billede neo_bill Nybegynder
20. oktober 2005 - 22:44 #4
Det hjalp heller ikke :( Jeg tænker umiddelbart at det kan være at jeg skal importere det library først?

import mx.utils.Delegate; ?

Det virker dog ikke
Avatar billede neo_bill Nybegynder
20. oktober 2005 - 23:17 #5
Hov jeg læste forkert før.

_socket.onConnect = function(e){trace("succes:"+e);};

Giver: "succes: false"

(Serveren er ikke oppe, men classen burde kunne testes alligevel)
Avatar billede neo_bill Nybegynder
22. oktober 2005 - 15:29 #6
Nå ser ikke ud til der er nogen der kender løsningen :( Svar gerne barklund, og tak for hjælpen!
Avatar billede barklund Nybegynder
23. oktober 2005 - 10:12 #7
Altså, det burde virke... Prøv næste skridt med en:

class Socket
{
    public var conStatus:Function;
    private var testConStatus:Function;
    private var _host : String = "#.#.#.#";
    private var _port : Number = 1337;
    private var _socket : XMLSocket;

    public function Socket ()
    {
        _socket = new XMLSocket ();
        _socket.onConnect = mx.utils.Delegate.create(this, testConStatus);
        testConStatus = function(s:Boolean):Void {
            trace("this is "+this);
            trace("s is "+s);
        }
    }
    public function doConnect () : Boolean
    {
        _socket.connect (_host, _port);
    }
    public function toString():String {
        return "Socket-instance: "+_host+":"+_port;
    }
}

Så kan du måske komme lidt tættere på i din debugging :)

--
Morten Barklund
Avatar billede barklund Nybegynder
23. oktober 2005 - 16:45 #8
Well, tak for point, men jeg er som sagt stadig villig til at løse problemet i fællesskab :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester