Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 20-09-2005, 16:09   #1 (permalink)
... loves Japan!
 
Benutzerbild von compuboy1010
 
Registriert seit: Apr 2005
Ort: D'dorf; DE
Beiträge: 715
Multidimensionales Array

Arrays sind noch nicht meine Stärke.Ergibt dieses hier keinen Sinn? Da scheint es ein paar Syntax Fehler zu
geben. Ich möchte ein mehrdim Array übergeben das so aussieht:

_global.aItems[i]["no"];
_global.aItems[i]["vpe"];
etc
Das Array wird so übergeben:
ActionScript:
  1. this.addItemToCard(aItems[i], mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+id].nsStepper.value);


ActionScript:
  1. _global.aCardItems = new Array();
  2. function addItemToCard(item:Array, noItemsAdded:Number):Void {
  3.     if(_global.aCardItems.length = 0) { // if no item in card yet
  4.         _global.aCardItems[item[]['no']]['data'].push(item);
  5.         _global.aCardItems[item[]['no']]['noItems'] = noItemsAdded;
  6.     } else { // if item with same item no in card is already in card
  7.         for(var i:Number=0; i<_global.aCardItems.length; i++) {
  8.             if(_global.aCardItems[item[]['no']] == item[]['no']) {
  9.                 _global.aCardItems[item[]['no']]['noItems'] + noItemsAdded;
  10.             } else { // append item
  11.                 _global.aCardItems[item[]['no']]['data'].push(item);
  12.                 _global.aCardItems[item[]['no']]['noItems'] = noItemsAdded;
  13.             }
  14.         }
  15.     }
  16. }

Geändert von compuboy1010 (21-09-2005 um 08:17 Uhr)
compuboy1010 ist offline   Mit Zitat antworten
Alt 20-09-2005, 16:15   #2 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
??
Was soll denn das bewirken?
PHP-Code:
// item[]['no'] ??
 
_global.aCardItemsitem[]['no'] ]['data'].push(item); 
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 21-09-2005, 07:48   #3 (permalink)
... loves Japan!
 
Benutzerbild von compuboy1010
 
Registriert seit: Apr 2005
Ort: D'dorf; DE
Beiträge: 715
@ rendner

_global.aCardItems[item[]['no']]['data'].push(item);
Das Array soll dann in etwa so einen Eintrag haben:

_global.aCardItems[87162]['data'] = Zeiger auf übergebenes Array mit allen relevanten Daten

Leider klappt es nicht so wie ich will:

**Error** Symbol=product, layer=action, frame=1:Line 11: Unexpected ']' encountered
_global.aCardItems[item[]['no']]['data'].push(item);

**Error** Symbol=product, layer=action, frame=1:Line 12: Unexpected ']' encountered
_global.aCardItems[item[]['no']]['noItems'] = noItemsAdded;

**Error** Symbol=product, layer=action, frame=1:Line 13: ']' expected
} else { // if item with same item no in card is already in card

**Error** Symbol=product, layer=action, frame=1:Line 15: Unexpected ']' encountered
if(_global.aCardItems[item[]['no']] == item[]['no']) {

**Error** Symbol=product, layer=action, frame=1:Line 16: Unexpected ']' encountered
_global.aCardItems[item[]['no']]['noItems'] + noItemsAdded;

**Error** Symbol=product, layer=action, frame=1:Line 17: ']' expected
} else {

**Error** Symbol=product, layer=action, frame=1:Line 18: Unexpected ']' encountered
_global.aCardItems[item[]['no']]['data'].push(item);

**Error** Symbol=product, layer=action, frame=1:Line 19: Unexpected ']' encountered
_global.aCardItems[item[]['no']]['noItems'] = noItemsAdded;

**Error** Symbol=product, layer=action, frame=1:Line 20: ']' expected
}

Total ActionScript Errors: 9 Reported Errors: 9

Geändert von compuboy1010 (21-09-2005 um 07:55 Uhr)
compuboy1010 ist offline   Mit Zitat antworten
Alt 21-09-2005, 11:03   #4 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
???
Siehst du denn nicht auch das da was fehlt?

item[]['no']

Was ist denn in den eckigen klammern hinter dem item los? ( da mus etwas rein! )
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 21-09-2005, 11:16   #5 (permalink)
... loves Japan!
 
Benutzerbild von compuboy1010
 
Registriert seit: Apr 2005
Ort: D'dorf; DE
Beiträge: 715
Bin mittlerweile schon wieder etwas weiter. Alledering kommt nur die Ausgabe undefined als Ausgabe in der textbox.
:-(

ActionScript:
  1. _global.aCardItems = new Array();
  2. function addItemToCard(item:Array, noItemsAdded:Number):Void {
  3.      if (_global.aCardItems.length == 0) { // if no item in card yet
  4.           _global.aCardItems.push(item);
  5.           _global.aCardItems[_global.aCardItems.length-1]['noItems'] = noItemsAdded;
  6.      } else { // if item with same item no in card is already in card
  7.           for (var i = 0; i<_global.aCardItems.length; i++) {
  8.                if (_global.aCardItems[i]['no'] == item['no']) {
  9.                     _global.aCardItems[i]['noItems'] + noItemsAdded;
  10.                } else { // append item
  11.                     _global.aCardItems.push(item);
  12.                     _global.aCardItems[_global.aCardItems.length-1]['noItems'] = noItemsAdded;
  13.                }
  14.           }
  15.      }
  16.      //testoutput
  17.       for (var i = 0; i<_global.aCardItems.length; i++) {
  18.          _level0.tTest.text = _global.aCardItems[i]['no'];
  19.          _level0.tTest.text_global.aCardItems[i]['noItems'];
  20.       }
  21. }
compuboy1010 ist offline   Mit Zitat antworten
Alt 21-09-2005, 11:30   #6 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
PHP-Code:
  _global.aCardItems[_global.aCardItems.length-1]['noItems'] = noItemsAdded
Soll noItemsAdded ein String sein oder ist das eine Variable?

Und dann würde ich das auch so machen:
PHP-Code:
 //testoutput
        
for (var 0i<_global.aCardItems.lengthi++) {
                
_level0.tTest.text += _global.aCardItems[i]['no'] + '\n';
                
_level0.tTest.text +=  _global.aCardItems[i]['noItems'] + "\n\n";
        } 
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 21-09-2005, 12:08   #7 (permalink)
... loves Japan!
 
Benutzerbild von compuboy1010
 
Registriert seit: Apr 2005
Ort: D'dorf; DE
Beiträge: 715
Das ist die Nummer der hinzugefügten Artikel. Also eine Zahl.
compuboy1010 ist offline   Mit Zitat antworten
Alt 21-09-2005, 12:56   #8 (permalink)
... loves Japan!
 
Benutzerbild von compuboy1010
 
Registriert seit: Apr 2005
Ort: D'dorf; DE
Beiträge: 715
Ich schaffe es einfach nicht. Der gibt immernoch undefined für die 'id' aus.

Ich rufe die Funktion ja so auf(siehe untere Funktion):

ActionScript:
  1. this._parent._parent._parent._parent._parent._parent.addItemToCard(_global.aItems[i], mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+id].nsStepper.value);

ActionScript:
  1. function addItemToCard(aItem:Array, nNoItemsAdded:Number):Void {
  2.      if (_global.aCardItems.length == 0) { // if no item in card yet
  3.           _global.aCardItems[0] = new Array();
  4.           _global.aCardItems[0]['id'] = aItem['no'];
  5.           _global.aCardItems[0]['item'].push(aItem);
  6.           _global.aCardItems[0]['noItems'] = nNoItemsAdded;
  7.      } else { // if item with same item no in card is already in card
  8.           for (var i = 0; i<_global.aCardItems.length; i++) {
  9.                if (_global.aCardItems[i]['id'] == aItem['no']) {
  10.                     _global.aCardItems[i]['noItems'] + nNoItemsAdded;
  11.                } else { // append item
  12.                       _global.aCardItems[_global.aCardItems.length-1] = new Array();
  13.                     _global.aCardItems[_global.aCardItems.length-1]['id'] = aItem['no'];
  14.                     _global.aCardItems[_global.aCardItems.length-1]['item'].push(aItem);
  15.                     _global.aCardItems[_global.aCardItems.length-1]['noItems'] = nNoItemsAdded;
  16.                }
  17.           }
  18.      }
  19.      //testoutput
  20.       _level0.tTest.text = "";
  21.      for (var i = 0; i<_global.aCardItems.length; i++) {
  22.          _level0.tTest.text = _global.aCardItems[i]['id'];
  23.          _level0.tTest.text +=  _global.aCardItems[i]['noItems'];
  24.       }
  25. }

Der Aufruf der Funktion kommt aus dieser Funktion:

ActionScript:
  1. function displayOrderinfo():Void {
  2.     var yPosition:Number;
  3.     this.mcSection.removeMovieClip();
  4.     this.createEmptyMovieClip("mcSection", getNextHighestDepth());
  5.     this.mcSection.attachMovie("itemlist", "mcItemlist", this.getNextHighestDepth(), {_x:0, _y:60});
  6.     onEnterFrame = function () {
  7.         delete this.onEnterFrame;
  8.         this.mcSection.mcItemlist.spItemlist.setStyle("borderStyle", "none");
  9.         this.mcSection.mcItemlist.spItemlist.setStyle("backgroundColor", 0xffffff);
  10.         this.mcSection.mcItemlist.spItemlist.contentPath = "empty";
  11.         for (var i = 0; i<_global.aItems.length; i++) {
  12.             this.mcSection.mcItemlist.spItemlist.spContentHolder.attachMovie("item", "mcItem"+i, i);
  13.             this.mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+i]._x = 5;
  14.             this.mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+i]._y = this.mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+i]._height*i;
  15.             this.mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+i].tAb1.text = _global.aItems[i]["ab1"];
  16.             this.mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+i].tAb4.text = _global.aItems[i]["ab4"];
  17.             this.mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+i].tAb6.text = _global.aItems[i]["ab6"];
  18.             this.mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+i].tAb12.text = _global.aItems[i]["ab12"];
  19.             this.mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+i].tDescription.text = _global.aItems[i]["description"];
  20.             this.mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+i].tItemNo.text = _global.aItems[i]["no"];
  21.             this.mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+i].tVpe.text = _global.aItems[i]["vpe"];
  22.             this.mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+i].btAdd.onRelease = function() {
  23.                 var id:Number = this._parent._name.substring(6);
  24.                 if (mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+id].nsStepper.value != 0) {
  25.                     this._parent._parent._parent._parent._parent._parent.addItemToCard(aItems[i], mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+id].nsStepper.value);
  26.                     _level0.mcMain.attachMovie("itemAdded", "mcItemAdded"+id, _level0.mcMain.getNextHighestDepth());
  27.                     _level0.mcMain["mcItemAdded"+id]._x = (Stage.width-_level0.mcMain["mcItemAdded"+id]._width)/2;
  28.                     _level0.mcMain["mcItemAdded"+id]._y = (Stage.height-_level0.mcMain["mcItemAdded"+id]._height)/2;
  29.                     onEnterFrame = function () {
  30.                         delete this.onEnterFrame;_level0.mcMain["mcItemAdded"+id].play();};
  31.                 }
  32.             };
  33.         }
  34.     };
  35. }

Geändert von compuboy1010 (21-09-2005 um 13:34 Uhr)
compuboy1010 ist offline   Mit Zitat antworten
Alt 21-09-2005, 14:00   #9 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Zitat:
ActionScript:
  1. this._parent._parent._parent._parent._parent._parent.addItemToCard(_global.aItems[i], mcSection.mcItemlist.spItemlist.spContentHolder["mcItem"+id].nsStepper.value)
Normalerweise heißt es, man solle pro Zeile maximal 80 Zeichen schreiben, du verdoppelst das glatt, da muss man sich nicht wundern, wenn man einen Fehler nicht findet, allein in dieser Zeile könntest du einige machen.
Vielleicht solltest du deinen Aufbau überdenken, sechs mal _parent ist absolut krank, das muss irgendwie anders gehen.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 21-09-2005, 15:03   #10 (permalink)
... loves Japan!
 
Benutzerbild von compuboy1010
 
Registriert seit: Apr 2005
Ort: D'dorf; DE
Beiträge: 715
Es klappt nun. Im aufruf muss es anstatt _global.aCardItems[i] muss es _global.aCardItems[id] heißen.

Wie komme ich aber nun bei der Ausgabe in einem Textfeld an die Beschreibung ran.

So klappt es nicht:
ActionScript:
  1. this.mcEmptyScrollPane.spEmpty.spContentHolder["mcCardEntry"+i].tName.text = _global.aCardItems[i]['item']['description'];

PS: Wüsste ich wie man es unter 80 Zeilen bekommt würde ich es glauben.
Oder soll aus deinem Kommentar schließen, dass du meinst ich fände unleserlichen Code geil? Bin froh, dass es funzt ...

Geändert von compuboy1010 (21-09-2005 um 15:06 Uhr)
compuboy1010 ist offline   Mit Zitat antworten
Alt 21-09-2005, 15:41   #11 (permalink)
... loves Japan!
 
Benutzerbild von compuboy1010
 
Registriert seit: Apr 2005
Ort: D'dorf; DE
Beiträge: 715
Der letzte Code von mir wahr wohl ziehmlich unlogisch.

Dieser ist etwas besser. Allerdings wird nur der erste Artikel angezeigt und auch nur der Artikelnummer und Anzahl. Bei den anderen Artikel wird "undefined" angezeigt. Warum speichert der nur einen Artikel?

Wo ist nur der Denkfehler?

ActionScript:
  1. function addItemToCard(aItem:Array, nNoItemsAdded:Number):Void {
  2.      if (_global.aCardItems.length == 0) { // if no item in card yet
  3.           _global.aCardItems[0] = new Array();
  4.           _global.aCardItems[0]['id'] = aItem['no'];
  5.           _global.aCardItems[0]['item'].push(aItem);
  6.           _global.aCardItems[0]['noItems'] = nNoItemsAdded;
  7.      } else { // if item with same item no in card is already in card
  8.          var inArray:Boolean = false;
  9.          for (var i = 0; i<_global.aCardItems.length; i++) {
  10.                if (_global.aCardItems[i]['id'] == aItem['no']) {
  11.                     _global.aCardItems[i]['noItems'] += _global.aCardItems[i]['noItems'] + nNoItemsAdded;
  12.                     inArray = true;
  13.                }
  14.           }
  15.           if(!inArray) { // append item
  16.               _global.aCardItems[_global.aCardItems.length] = new Array();
  17.               _global.aCardItems[_global.aCardItems.length]['id'] = aItem['no'];
  18.               _global.aCardItems[_global.aCardItems.length]['item'].push(aItem);
  19.               _global.aCardItems[_global.aCardItems.length]['noItems'] = nNoItemsAdded;
  20.           }
  21.      }
  22.      //testoutput
  23. /*      _level0.tTest.text = "";
  24.      for (var i = 0; i<_global.aCardItems.length; i++) {
  25.          _level0.tTest.text = _global.aCardItems[i]['id'];
  26.          _level0.tTest.text +=  _global.aCardItems[i]['noItems'];
  27.       }
  28.       */
  29. }

Geändert von compuboy1010 (21-09-2005 um 15:55 Uhr)
compuboy1010 ist offline   Mit Zitat antworten
Alt 21-09-2005, 16:40   #12 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Du solltest vielleicht auch mal den Computer herunterfahren und mal spazieren gehen...
PHP-Code:
// Erstellung eines neuen Array's --> richtig
  
_global.aCardItems[_global.aCardItems.length] = new Array();
// Fehler...muesste doch jetzt [_global.aCardItems.length-1] heissen
                        
_global.aCardItems[_global.aCardItems.length]['id'] = aItem['no'];
                        
_global.aCardItems[_global.aCardItems.length]['item'].push(aItem);
                        
_global.aCardItems[_global.aCardItems.length]['noItems'] = nNoItemsAdded
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 22-09-2005, 07:21   #13 (permalink)
... loves Japan!
 
Benutzerbild von compuboy1010
 
Registriert seit: Apr 2005
Ort: D'dorf; DE
Beiträge: 715
Zitat:
Zitat von rendner[i]
Du solltest vielleicht auch mal den Computer herunterfahren und mal spazieren gehen...
PHP-Code:
// Erstellung eines neuen Array's --> richtig
  
_global.aCardItems[_global.aCardItems.length] = new Array();
// Fehler...muesste doch jetzt [_global.aCardItems.length-1] heissen
                        
_global.aCardItems[_global.aCardItems.length]['id'] = aItem['no'];
                        
_global.aCardItems[_global.aCardItems.length]['item'].push(aItem);
                        
_global.aCardItems[_global.aCardItems.length]['noItems'] = nNoItemsAdded
length-1 hatte ich vorher drin. Das klappte nicht. Denn dann nimmt er ja die letzte Position im Array. Es soll aber eine hinzugefügt werden, deswegen muss es heißen length.
compuboy1010 ist offline   Mit Zitat antworten
Alt 22-09-2005, 08:33   #14 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Indem du aber dem Array ein neues Feld zuweist (in dem Beispiel die erste Zeile Code) erhöht sich die Länge deines Array um eins, also ist length nach dieser Zeile eins zu groß.
Eleganter wäre:
ActionScript:
  1. var position = meinArray.push(newArray) - 1;
  2. meinArray[position].blablabla = "gaga";
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 22-09-2005, 08:53   #15 (permalink)
... loves Japan!
 
Benutzerbild von compuboy1010
 
Registriert seit: Apr 2005
Ort: D'dorf; DE
Beiträge: 715
Was?

ActionScript:
  1. _global.aCardItems[_global.aCardItems.length] = new Array();

Diese Zeile bewirkt doch nicht, dass der Index des Arrays _global.aCardItems erhöht wird. Sie bewirkt, dass an Position _global.aCardItems.length das Array ein Array aufnehmen kann.
compuboy1010 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele