Mala pomoć u Flashu, Kratko objašnjenje molim |
Dobrodošli, goste ( Prijava | Registracija )
![]() ![]() |
Mala pomoć u Flashu, Kratko objašnjenje molim |
Jan 30 2012, 09:57
Poruka
#1
|
|
|
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; */ } } } |
|
|
|
|
Jan 30 2012, 11:50
Poruka
#2
|
|
|
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 ? |
|
|
|
|
Jan 30 2012, 12:31
Poruka
#3
|
|
|
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. |
|
|
|
|
Jan 30 2012, 12:58
Poruka
#4
|
|
|
^^^ 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; |
|
|
|
|
Jan 30 2012, 13:51
Poruka
#5
|
|
|
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]}); } } |
|
|
|
|
Jan 30 2012, 14:44
Poruka
#6
|
|
|
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 */ } } } |
|
|
|
|
Jan 30 2012, 15:42
Poruka
#7
|
|
|
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. |
|
|
|
|
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.
|
|
|
|
Jan 30 2012, 16:37
Poruka
#9
|
|
|
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.
|
|
|
|
|
Jan 30 2012, 17:22
Poruka
#10
|
|
|
Grupa: Članovi Poruke: 106 Datum reg.: 25-March 09 Lokacija: BiH Član broj: 28,853 |
.... ž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. |
|
|
|
Jan 30 2012, 17:49
Poruka
#11
|
|
|
^ 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.. |
|
|
|
|
![]() ![]() |
| Lo-fi verzija | Trenutno vreme: Saturday 25. May 2013 - 20:35 |