Dobrodošli, goste ( Prijava | Registracija )

 
Reply to this topicStart new topic

Mala pomoć u Flashu, Kratko objašnjenje molim

V
jossaric
poruka Jan 30 2012, 09:57
Poruka #1




Grupa: Članovi
Poruke: 247
Datum reg.: 23-August 07
Lokacija: Mostar
Član broj: 13,637



Ono što mi treba je u zadnjoj funkciji, potrebno mi je kratko objašnjenje, tnx.

CODE
package com.sfaccountant {
    
    import flash.display.MovieClip;
    import fl.controls.ComboBox;
    
    public class ClientForm extends MovieClip {
        
        public static var drzava:ComboBox;
                
        public function ClientForm():void {            
            addComponents();        
        }    
        
        public function addComponents():void{        
            drzava = new ComboBox();
            drzava.prompt = "Odaberi državu";
            drzava.width = 500;
            drzava.move(0, 228);
            addChild(drzava);
        }
        
        public static function testnaFunkcija():void{
            trace(drzava);
            
            /*
            Ova funkcija se pokreće iz druge klase
            i trejsuje mi null;
            */
        }

    }
    
}


Go to the top of the page
 
+Quote Post
iki_xx
poruka Jan 30 2012, 11:50
Poruka #2




Grupa: Članovi
Poruke: 788
Datum reg.: 28-June 05
Lokacija: Novi Sad
Član broj: 1,078



ocigledno ima neka caka sa tim combobox-om.
Treba da trejsuje to, probaj da kreiras jos jednu promenjivu (sprite) i nju da trejsujes.
- Da li ti fajl sve vreme stoji na istom frejmu gde je combobox ili se pomera pa se vraca ?
Go to the top of the page
 
+Quote Post
syndrome
poruka Jan 30 2012, 12:31
Poruka #3


zgužvam.. bacim

Grupa: Urednici
Poruke: 6,376
Datum reg.: 1-June 05
Lokacija: Beograd
Član broj: 808



ovaj kod je vrlo nesrecan. jedna od ideja OOP je da interne komponente nisu transparentne i javno dohvatljive.
ako ti ClientForm vec nasledjuje MovieClip zasto cuvas referencu ka detetu kao statickog clana?

MovieClip vec poseduje interfejs za dolazenje do clanova na display listi, ovim samo komplikujes i nepotrebno pravis kolizije, kao da si potpuno slep prema citavom zidu metoda i propertyja koje si potegao sa extends.

razlog zasto ti vraca null, umesto da pukne je sledeci:
MovieClip je dinamicka klasa, sto znaci da radi kao sto su objekti radili ranije u ASu: obratis se nekom propertyju, i ono ce se praviti da postoji (ali nije definisano), cak i kada nikada nije eksplicitno deklarisano pre toga.

jedno od nedefinisanih propertyja tvoje MovieClip klase je drzava.
kada kazes trace(drzava); to je isto kao trace(this.drzava); ili trace(this["drzava"]);

znaci potegao si property sa ClientForm instance, koja je dinamicka (nasledila je dynamic iz klase MovieClip), i samim tim vratice ti default vrednost -- null.

tako gadjas potpuno pogresan namespace, jer je tvoja drzava staticki(!) member klase ClientForm, odnosno ne pripada instanci vec klasi.

drugim recima, probaj sa trace(ClientForm.drzava); i potrudi se da u metodi addComponents eksplicitno adresiras tu istu drzavu, kao i da taj poziv ne dolazi posle poziva testnaFunkcija.
Go to the top of the page
 
+Quote Post
iki_xx
poruka Jan 30 2012, 12:58
Poruka #4




Grupa: Članovi
Poruke: 788
Datum reg.: 28-June 05
Lokacija: Novi Sad
Član broj: 1,078



^^^ u pravu si da trace komanda nece raditi , ali referenca ka drzavi postoji , znaci u tom statickom metodu on moze da kaze:
drzava.x = 100;
Go to the top of the page
 
+Quote Post
jossaric
poruka Jan 30 2012, 13:51
Poruka #5




Grupa: Članovi
Poruke: 247
Datum reg.: 23-August 07
Lokacija: Mostar
Član broj: 13,637



Problem je sljedeći, vi ste izgorili u OOP u flashu a ja baš i nisam. Ovdje prvenstveno mislim na Syndromana jer sam dosta njegovih radova i analiza i objašnjenja čitao na ovom forumu tako da znam kakva je to logika.

Dakle, moje potrebe su sljedeće.

Imam klasu StateForm u kojoj su funkcije koje dodaju države u tablicu sqlite.
Isto tako imam klasu DBHelper u kojoj su mi funkcije za otvaranje baze i izvršavanje upita.
I imam klasu ClientForm u u kojoj imam potrebu za jednom funkcijom koja će se odraditi svaki put kad se odradi unos u tablicu drzava. Dakle kada formom unesemo drzavu upit se izvrsava u DBHelper klasi nakon izvršavanja upita trebam da osvježim ComboBox na klijent formi.

Nemam problem sa početnim punjenjem drzava ComboBoxa jer u CliemtForm klasi to radi funkcija

CODE
private function populateStates():void{
            for(var i:uint = 0; i<DBHelper.stateList.length; i++){
                drzava.addItem({label:DBHelper.stateList[i], data:DBHelper.stateList[i]});
            }
        }
Go to the top of the page
 
+Quote Post
jossaric
poruka Jan 30 2012, 14:44
Poruka #6




Grupa: Članovi
Poruke: 247
Datum reg.: 23-August 07
Lokacija: Mostar
Član broj: 13,637



Daj mi netko konkretno napravi ispravke uz kratko objašnjenje sljedeće klase

CODE
package com.sfaccountant {
    
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    
    import fl.controls.ComboBox;
    import fl.data.DataProvider;
    
    import fl.controls.*;
    import fl.data.*;
    import fl.events.*;
    
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;
    
    public class ClientForm extends MovieClip {
    
        public function ClientForm():void {            
            _init();            
        }
        
        private function _init():void {
            addComponents();
        }        
        
        private function addComponents():void{        
            var drzava:ComboBox = new ComboBox();
            drzava.prompt = "Odaberi državu";
            drzava.width = 500;
            drzava.move(0, 228);
            addChild(drzava);
        }    
        
        public static function testnaFunkcija():void{
            trace(drzava);
            
            /*
                s tim da se ovoj metodi moze pristupiti iz druge klase
            */
        }

    }
    
}
Go to the top of the page
 
+Quote Post
syndrome
poruka Jan 30 2012, 15:42
Poruka #7


zgužvam.. bacim

Grupa: Urednici
Poruke: 6,376
Datum reg.: 1-June 05
Lokacija: Beograd
Član broj: 808



CODE
package ... {
  
  // imports..

  public class ClientForm extends Sprite {

    private var _countryList:Vector.<Country>;
    private var _selectedCode:String;
    public function get selectedCountry():Country { _findCountryInList(_selectedCode, _countryList); }
    
    public function ClientForm(countryList:Vector.<Country>):void {
      _countryList = countryList;
      _setupCombo();
    }

    private function _setupCombo():void {
      var cmbCountries:ComboBox = new ComboBox();
      cmbCountries.prompt = "Odaberi drzavu";
      cmbCountries.width = 500;
      cmbCountries.y = 228;

      for(var i:int = 0; i < _countryList.length; i++) {
        cmbCountries.addItem( { label: _countryList[i].longname, data: _countryList[i].code } );
      }

      cmbCountries.addEventListener(Event.CHANGE, _countrySelectedHandler);
      this.addChild(cmbCountries);    
    }

    private function _countrySelectedHandler(evt:Event):void {
      var cmbCountries:ComboBox = evt.target as ComboBox;
      _selectedCode = cmbCountries.selectedItem.data;
    }

    private function _findCountryInList(code:String, countryList:Vector.<Country>):Country {
      var f:int = -1;
      for(var i:int = 0; i < countryList.length; i++) {
        if(countryList[i].code == code) {
          f = i;
          break;
        }
      }
      return (f >= 0) ? countryList[f] : null;
    }
    
  }
}


CODE
package ... {
  
  // imports..

  public class Country {

    private var _code:String; // http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
    public function get code():String { return _code; }

    private var _longname:String;
    public function get longname():String { return _longname; }
    
    public function Country(code:String, longname:String):void {
      _code = code;
      _longname = longname;
    }

  }
}


ovo je skroz napamet, mozda sam negde omasio, nemam trenutno vremena da objasnim.
kasnije.
Go to the top of the page
 
+Quote Post
gagy06
poruka Jan 30 2012, 15:45
Poruka #8




Grupa: Članovi
Poruke: 106
Datum reg.: 25-March 09
Lokacija: BiH
Član broj: 28,853



Ma sasvim si lijepo objasnio i u prethodnom postu. trebalo je sve biti jasno.
Go to the top of the page
 
+Quote Post
jossaric
poruka Jan 30 2012, 16:37
Poruka #9




Grupa: Članovi
Poruke: 247
Datum reg.: 23-August 07
Lokacija: Mostar
Član broj: 13,637



Problem je ovdje jer si postavio u combo vrijednosti u metodi _setupCombo a ja to ne želim, želim imati odvojenu metodu za punjenje comba i manipulaciju podataka unutar njega. Opet mi nije dostupan iz drugih klasa. Ja želim da u aplikaciji 1000000 puta osvježavam podatke u Combu. Dakle nikako da se on napuni pri kreiranju nego da mi bude komponenta dostupna za punjenje kada se nešto odradi u drugoj klasi.
Go to the top of the page
 
+Quote Post
gagy06
poruka Jan 30 2012, 17:22
Poruka #10




Grupa: Članovi
Poruke: 106
Datum reg.: 25-March 09
Lokacija: BiH
Član broj: 28,853



CITAT (jossaric @ Jan 30 2012, 16:37) *
.... želim imati odvojenu metodu za punjenje comba i manipulaciju podataka unutar njega. Opet mi nije dostupan iz drugih klasa. Ja želim da u aplikaciji 1000000 puta osvježavam podatke u Combu. Dakle nikako da se on napuni pri kreiranju nego da mi bude komponenta dostupna za punjenje kada se nešto odradi u drugoj klasi.

Meni se cini da je tebi glavni problem pristup toj klasi inace bi trebao samo da imas public ili setter funkciju i svar je rijesena.
Ako je to slucaj rijesenje je singleton. dry.gif
Go to the top of the page
 
+Quote Post
syndrome
poruka Jan 30 2012, 17:49
Poruka #11


zgužvam.. bacim

Grupa: Urednici
Poruke: 6,376
Datum reg.: 1-June 05
Lokacija: Beograd
Član broj: 808



^ da.

mrzi me da pisem singleton varijantu, ali to je ionako mnogo lose resenje, praviti singleton samo zato sto nas mrzi da dohvatimo referencu kako treba...

singletoni po definiciji mogu biti paramount servisi ili provajderi za koje smo apsolutno sigurni da mogu imati samo jednu instancu, i za koje je relativno zgodno da se ucitaju/inicijalizuju samo jednom, a onda ostanu rezidentni u memoriji.

singletoni nikad nisu klase koje cemo eventualno naslediti, i uglavnom su poprilicno rudimentarni i self-sufficient.
najcesce se koriste kao factory klase i instance- odnosno data-provider entiteti, mada mogu biti i importeri, enkoderi/dekoderi, nekakvi utili, enumeracije, i sl.

ta UI varijanta koju imamo gore je bas antikandidat za singleton.

@jossaric
ja sam gore isao blackbox logikom.. udje prost spisak objekata, izlazi jedan od objekata iz spiska, sav GUI i interakcija je enkapsulirana. ako ti je potrebno nesto vise od toga obrati paznju na standardni MVC dizajn i probaj da ga primenis na svoj kod.

CITAT
Ja želim da u aplikaciji 1000000 puta osvježavam podatke u Combu. Dakle nikako da se on napuni pri kreiranju nego da mi bude komponenta dostupna za punjenje kada se nešto odradi u drugoj klasi.

pa napravi. ta klasa nije uklesana u kamen. dodaj public metodu za populisanje.. i sta ti jos treba..
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

 



Lo-fi verzija Trenutno vreme: Tuesday 21. May 2013 - 18:44

Sve informacije (poruke, teme i sl.) predstavljaju stavove samo njihovih autora.
Objavljivanje informacija sa sajta u nekomercijalne svrhe moguće je samo uz navođenje URL adrese diskusije.
Za sve druge vidove distribucije potrebno je imati izričitu dozvolu administratora Dizajn Zone i/ili autora poruka.
Autorska prava za sadržaj poruke zadržava njihov autor, osim ako nije drugačije naznačeno.

powered by:Plus hosting