27. marts 2003 - 14:00
Der er
47 kommentarer og 1 løsning
Styring af listbox fra function
Hej Eksperter Denne gang sider jeg fast. Hvad gør jeg forkert her: this.getPersons_Result = function(result) { curPersons_array = new Array(); for (i=0; i<result.getLength(); i++) { names_lb.addItem("jakob",22); trace("i for loop"); } }; List boxen "names_lb" får ikke label: jakob og value: 22 trace funktionen virker fint. Nogen gode bud? Jakwag
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
27. marts 2003 - 14:01
#1
scriptet ligger i første/eneste frame i maintimeline, det samme gør "names_lb"
27. marts 2003 - 14:10
#2
..og hvad sender du til den? en anden listbox eller hvad? Hvad skal der ske? Når jeg tester dit script skriver den jakob i min listbox, helt fint, det antal gange som den listbox der er sendt til funtionen er lang. ???
27. marts 2003 - 14:13
#3
HVAD!
Det gør den altså ikke hos mig
Her kan du se scriptet som det skulle virke, problemet er at listboxen forbliver tom:
#include "NetDebug.as"
#include "NetServices.as"
NetServices.setDefaultGatewayURL("
http://localhost:8500/flashservices/gateway" );
var net_conn = NetServices.createGatewayConnection();
var personService = net_conn.getService("personale.personale", this);
//*****************************
//**************
firma_cb.addItem("Firma");
firma_cb.addItem("LOGICON");
firma_cb.addItem("MultiVision");
//*********************************
firma_cb.showPersons = function() {
selected = firma_cb.getSelectedItem().label;
names = personService.getPersons(selected);
names_lb.setDataProvider(names);
};
firma_cb.setChangeHandler("showPersons", firma_cb);
//****************
this.getPersons_Result = function(result) {
curPersons_array = new Array();
for (i=0; i<result.getLength(); i++) {
this["personData"+i] = new Object();
this["personData"+i].navn = result.getItemAt(i).navn;
this["personData"+i].lokalNummer = result.getItemAt(i).lokalNummer;
curPersons_array[i] = this["personData"+i];
names_lb.addItem(curPersons_array[i].navn, curPersons_array[i].lokalNummer);
}
};
27. marts 2003 - 14:24
#4
uha min viden om komponenterne kan ligge på et meget lille sted :) Men du beder om at få itemAt i .navn er det et label der hedder navn, eller skal det ikke bare være label og data? Så dine objekter får tildelt label og data fra de givne poster i listboxen? Jeg undskylder hvis jeg skyder totalt forbi her, men det er rent gætværk.
27. marts 2003 - 14:27
#5
For at teste skiftede jeg: names_lb.addItem(curPersons_array[i].navn, curPersons_array[i].lokalNummer); -ud med: names_lb.addItem("jakob",22); Så det meste af dette script burde slet ikke have en indflydelse.
27. marts 2003 - 14:28
#6
bruger f.eks. names_lb.removeAll(); samme sted virker det heller ikke;
27. marts 2003 - 15:08
#7
hvorfor skriver du "this" foran din funktion? og hvem invoker din funktion (kalder den)? Der mangler noget script - eller hva'?
27. marts 2003 - 15:09
#8
Nåja... Kan du trace inden fra dit loop? Kommer den derind? Kan du trace værdien og typen af "names_lb" ud?
27. marts 2003 - 15:16
#9
Den kommer dertil da min trace funktion virker. Jeg kan godt trace(names_lb._x) men ikke trace(names_lb.getItemAt(0))
27. marts 2003 - 15:18
#10
der er ingen grund til "this" : )
27. marts 2003 - 15:26
#11
hvad siger en trace("type is "+typeof names_lb.getItemAt);
27. marts 2003 - 15:26
#12
Hvorfra bliver dit script kaldt?
27. marts 2003 - 15:27
#13
scriptet ligger i første/eneste frame i maintimeline, det samme gør "names_lb"
27. marts 2003 - 15:29
#14
dit script bliver vist automatisk invoked af din netservices? har aldrig arbejdet med det, men kan da godt gætte lidt med... :)
27. marts 2003 - 15:31
#15
med script mener jeg funktionen "getPersons_result"... Hvem kalder den?
27. marts 2003 - 15:33
#16
præcis. Den bliver aktiveret når der kommer et result tilbage fra denne linie: names = personService.getPersons(selected); result i () efter funktionen indeholder de dataer som er mod taget. Dette burde ikke have noget at gøre med mit problem, som sagt så køre funktionen godtnok men jeg kan ikke få fat i min listbox.
27. marts 2003 - 15:34
#17
Det er ellers ret effektivt - Flash remoting : )
27. marts 2003 - 15:35
#18
suffixet _Result aktivere et eller andet i netservices.as så den ved at der er modtaget data.
27. marts 2003 - 15:38
#19
jo, hvem der kalder HAR noget at gøre med det. Det er jo et spørgsmål om tidslinier og om din listbox overhovedet findes i det scope hvorfra din funktion kører. Kan du trace typen af en funktion, der bør findes i din listbox ud?
27. marts 2003 - 15:40
#20
øøh.. Hvis du mener f.eks. trace(names_lb._x) kan jeg godt. Hvad mener du med typen af en funktion
27. marts 2003 - 15:43
#21
under alle omstændighedder burde man kunne skrive: _root.names_lb.addItem("jakob",22); -eller hvad, for det virker heller ikke.
27. marts 2003 - 15:51
#22
trace("type of addItem is "+typeof names_lb.addItem)
27. marts 2003 - 15:56
#23
output bliver: type of addItem is function tracer jeg trace("type of addItem is "+typeof names_lb) = output: type of addItem is movieclip
27. marts 2003 - 16:00
#24
så bør du have fat i den rigtige komponent. Så er en faktor elimineret :) Kan du i din changeHandler tilføjes jakob/22?
27. marts 2003 - 16:03
#25
endnu en gang er jeg ikke med : ) mener du i denne linie: firma_cb.setChangeHandler("showPersons", firma_cb); så nej. hvad mener du ellers?
27. marts 2003 - 16:08
#26
Nej... i ovenstående linie specificerer du, at funktionen "showPersons" skal være din changeHandler. Derfor referer jeg til denne funktion som netop din changeHandler, altså: firma_cb.showPersons = function() { names_lb.addItem("jakob",22); selected = firma_cb.getSelectedItem().label; names = personService.getPersons(selected); names_lb.setDataProvider(names); };
27. marts 2003 - 16:12
#27
hhmm.. Der sker det at hvis der i forvejen står noget i listboxen bliver det slettet - men der kommer ikke til at stå jakob. (Selvfølgelig er det min changeHandler (jeg prøver lige at vågne op))
27. marts 2003 - 16:15
#28
men jeg kan trace en label som allerede eksistere: firma_cb.showPersons = function() { trace(names_lb.getItemAt(0).label) selected = firma_cb.getSelectedItem().label; names = personService.getPersons(selected); names_lb.setDataProvider(names); };
27. marts 2003 - 16:16
#29
hvad hvis du helt uden for i bunden af dit script tilføjer jakob?
27. marts 2003 - 16:16
#30
det kan den godt
27. marts 2003 - 16:22
#31
Det er altså sært... hvis jeg i functionen tracer "this" så får jeg output: level0 this.getPersons_Result = function(result) { curPersons_array = new Array(); for (i=0; i<result.getLength(); i++) { this["personData"+i] = new Object(); this["personData"+i].navn = result.getItemAt(i).navn; this["personData"+i].lokalNummer = result.getItemAt(i).lokalNummer; curPersons_array[i] = this["personData"+i]; names_lb.addItem(curPersons_array[i].navn, curPersons_array[i].lokalNummer); //trace("type of addItem is "+typeof names_lb) trace(this) } }; så burde der da ikke være noget problem. Jeg kunne nok finde en anden måde at gøre det på. Der er bare et problem: jeg er stædig..
27. marts 2003 - 16:22
#32
det er sgu da mærkeligt... hvorfor kan den tilføje det ene sted og ikke det andet? prøv: firma_cb.addItem("Firma"); firma_cb.addItem("LOGICON"); firma_cb.addItem("MultiVision"); firma_cb.names_lb = names_lb; firma_cb.showPersons = function() { this.names_lb.addItem("jakob","22"); selected = this.getSelectedItem().label; names = personService.getPersons(selected); this.names_lb.setDataProvider(names); }; firma_cb.setChangeHandler("showPersons", firma_cb); /
27. marts 2003 - 16:26
#33
nop. Den gør det samme. sletter den der allerede står der (hvilket viser at der må være en kontakt) men tilføjer ikke den nye. -og hvorfor skal overhovedet slette den eksisterende? underligt
27. marts 2003 - 16:31
#34
det er addItem der på en eller anden måde bliver fucked up undervejs... måske bliver den interne repræsentation af data lavet om... hvorfor laver du en setDataProvider? hvad gør den?
27. marts 2003 - 16:34
#35
Hvad gav det her trace egentlig: trace(names_lb.getItemAt(0)) (jeg synes jeg har kigget tråden igennem efter resultatet)
27. marts 2003 - 16:37
#36
Nu fatter jeg INTET Det her virker: this.getPersons_Result = function(result) { curPersons_array = new Array(); resultLength = 0; for (i=0; i<result.getLength(); i++) { resultLength++; this["personData"+i] = new Object(); this["personData"+i].navn = result.getItemAt(i).navn; this["personData"+i].lokalNummer = result.getItemAt(i).lokalNummer; curPersons_array[i] = this["personData"+i]; } names_lb.removeAll(); for (i=0; i<resultLength; i++) { names_lb.addItem(curPersons_array[i].navn); } };
27. marts 2003 - 16:39
#37
hovsa - haha - setDataProvider gør intet længere, en lille rest fra tidligere eksperimenter
27. marts 2003 - 16:40
#38
trace(names_lb.getItemAt(0)) giver "undefined"
27. marts 2003 - 16:41
#39
Hvordan kan det virke i det ene for loop og ikke det andet. Det er jo den samme function?!?
27. marts 2003 - 16:46
#40
Det er også den forskel, at du nu kun adder med 1 argument og ikke 2... kan du adde som: getPersons_Result = function(result) { curPersons_array = new Array(); resultLength = 0; for (i=0; i<result.getLength(); i++) { resultLength++; this["personData"+i] = new Object(); this["personData"+i].navn = result.getItemAt(i).navn; this["personData"+i].lokalNummer = result.getItemAt(i).lokalNummer; curPersons_array[i] = this["personData"+i]; } names_lb.removeAll(); for (i=0; i<resultLength; i++) { names_lb.addItem(curPersons_array[i].navn, curPersons_array[i].lokalNummer); } };
27. marts 2003 - 16:53
#41
ja, det er ikke noget problem
27. marts 2003 - 16:54
#42
Men du påstår stadig, at hvis du flytter linien med addItem præcis som den er op i øverste loop, så virker det ikke?
27. marts 2003 - 16:57
#43
Det virker!! this.getPersons_Result = function(result) { curPersons_array = new Array(); resultLength = 0; for (i=0; i<result.getLength(); i++) { resultLength++; this["personData"+i] = new Object(); this["personData"+i].navn = result.getItemAt(i).navn; this["personData"+i].lokalNummer = result.getItemAt(i).lokalNummer; curPersons_array[i] = this["personData"+i]; names_lb.addItem(curPersons_array[i].navn, curPersons_array[i].lokalNummer); } };
27. marts 2003 - 16:59
#44
Det er jo det samme som jeg skrev første gang. men jeg har fjernet linien: names_lb.setDataProvider(names); Det giver også mening at det er den der har givet problemer.
27. marts 2003 - 17:02
#45
:) netop at den interne håndtering af data-repræsentationen var lavet om...
27. marts 2003 - 17:05
#46
Sikke en omgang. Jeg takker mange gange for hjælpen - smid et svar.
27. marts 2003 - 17:06
#47
:) i sådanne situationer er det altid er spørgsmål om at debugge fra en ende af... hvad virker og hvad virker ikke... en linie kode af gangen...
27. marts 2003 - 19:04
#48
Tark for point :)
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.