Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-09-2005, 13:07   #1 (permalink)
... loves Japan!
 
Benutzerbild von compuboy1010
 
Registriert seit: Apr 2005
Ort: D'dorf; DE
Beiträge: 715
Problem mit Globalvariable

Leute, warum kennt die Funktion addContentToContainer den Wert der Variablen _global_aCardItems nicht.
Auf einmal geht es nicht mehr. Weiß nicht was ich verändert habe. Wo ist das Problem?
ActionScript:
  1. _global.aCardItems = new Array();
  2. function addContentToContainer():Void {
  3.     this.onEnterFrame = function() {
  4.         delete this.onEnterFrame;
  5.         // Add the Table header to "mcEmptyScrollPaneContainer"
  6.         this.mcEmptyScrollPane.spEmpty.attachMovie("cardHeader", "mcCardHeader", 200, {_x:0, _y:30});
  7.         // add items to card display
  8.         // trace(_global.aCardItems.length) ergibt 0
  9.         for (var i = 0; i<_global.aCardItems.length; i++) {
  10.         // etc
  11. }
  12. }
  13. }
  14. function getCardItems():Void {
  15.     // Get XML
  16.     var xmlItems:XML = new XML();
  17.     xmlItems.ignoreWhite = true;
  18.     xmlItems.onLoad = function(bSuccess:Boolean) {
  19.         if (bSuccess) {
  20.             _global.aCardItems = new Array();
  21.             // delete previous array entries
  22.             var xnItem:XMLNode;
  23.             var xnName:XMLNode;
  24.             var xnDescription:XMLNode;
  25.             var xnPrice:XMLNode;
  26.             _global.bLoadedOK = true;
  27.             var xnRoot:XMLNode = this.firstChild;
  28.             for (var i = 0; i<xnRoot.childNodes.length; i++) {
  29.                 _global.aCardItems[i] = new Array();
  30.                 xnItem = xnRoot.childNodes[i];
  31.                 _global.aCardItems[i]['id'] = xnItem.attributes.id;
  32.                 // etc
  33.             }
  34.         }
  35.         //trace(_global.aCardItems.length); ergibt richtigen Wert
  36.     }
  37. }
  38. function showCard():Void {
  39.     this.attachMovie("emptyScrollPane", "mcEmptyScrollPane", 0);
  40.     this.onEnterFrame = function() {
  41.         delete this.onEnterFrame;
  42.         this.addContentToContainer();
  43.      this.getCardItems();
  44.     };
  45. }

Geändert von compuboy1010 (15-09-2005 um 13:13 Uhr)
compuboy1010 ist offline   Mit Zitat antworten
Alt 15-09-2005, 22:31   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Du rufst zuerst addContentToContainer() auf, da ist das Array auch noch nicht mit Werten belegt, das passiert nach deinem Script erst in der nächsten Funktion getCardItems. Und da wird das Array dann mehrdimensional.
  Mit Zitat antworten
Alt 19-09-2005, 09:50   #3 (permalink)
... loves Japan!
 
Benutzerbild von compuboy1010
 
Registriert seit: Apr 2005
Ort: D'dorf; DE
Beiträge: 715
Habe die Reihenfolge geändert. Das Problem besteht immer noch. Lasse ich mir die Arraylänge nach der If Schleife
ausgeben bekomme ich korrekterweise "3" als Ausgabe, wenn sich 3 Artikel im Korb befinden.
Packe ich das trace() aber an den Anfang der Funktion addContentToContainer() gibt er mir für die Länge "0" aus.
Habe ein weiteres onEnterFrame hinzugefügt und nun gar keine Ausgabe mehr.
Ich weiß wirklich nicht mehr weiter.
ActionScript:
  1. function showCard():Void {
  2.     this.attachMovie("emptyScrollPane", "mcEmptyScrollPane", 0);
  3.     this.onEnterFrame = function() {
  4.         delete this.onEnterFrame;
  5.         this.getCardItems();
  6.         this.onEnterFrame = function() {
  7.             delete this.onEnterFrame;
  8.             this.addContentToContainer();
  9.         };
  10.     };
  11. }
compuboy1010 ist offline   Mit Zitat antworten
Alt 19-09-2005, 10:19   #4 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Ruf doch mal testhalber addContentToContainer kaskadierend auf, also nach der trace-Ausgabe in getCardItems statt aus showCard. Vielleicht ist das ja immer noch ein zeitkritisches Problem abhängig von der Menge an childNodes deines XML-Objektes...
  Mit Zitat antworten
Alt 19-09-2005, 11:46   #5 (permalink)
... loves Japan!
 
Benutzerbild von compuboy1010
 
Registriert seit: Apr 2005
Ort: D'dorf; DE
Beiträge: 715
Schau mal biite hier:

So klappt es, aber die Daten werden erst nach dem Schließen des Warenkorbs und Wiederholtem Öffnen korrekt angezeigt. Also wieder erst einen Klick zu spät.

Woran liegt das nun wieder? Das Problem ist, dass in der for Schleife ein attachMovie steht und unmittelbar dahinter Werte an dessen Textfelder übergeben werden. Das könnte das Problem sein, aber ein onEnterFrame nach dem attachMovie in der For Schleife lässt alle Felder blank.

ActionScript:
  1. _global.aCardItems = new Array();
  2. function addContentToContainer():Void {
  3.     // Add the Table header to "mcEmptyScrollPaneContainer"
  4.     this.mcEmptyScrollPane.spEmpty.attachMovie("cardHeader", "mcCardHeader", 200, {_x:0, _y:30});
  5.     this.onEnterFrame = function() {
  6.         delete this.onEnterFrame;
  7.         // add items to card display
  8.         _level0.tTest.text = _global.aCardItems.length;
  9.         var nTotalPrice:Number;
  10.         for (var i = 0; i<_global.aCardItems.length; i++) {
  11.             this.mcEmptyScrollPane.spEmpty.attachMovie("cardEntry", "mcCardEntry"+i, i, {_x:0, _y:(30*i)+70});
  12.             this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].tItem.text = _global.aCardItems[i]['id'];
  13.             this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].tName.text = _global.aCardItems[i]['name'];
  14.             this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].tNumber.value = Number(_global.aCardItems[i]['number']);
  15.             this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].tPrice.text = _global.aCardItems[i]['single'];
  16.             this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].tSubtotal.text = _global.aCardItems[i]['number']*Number(_global.aCardItems[i]['single']);
  17.             nTotalPrice += Number(this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].tSubtotal.text);
  18.             // Controller for "update" button
  19.             this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].btUpdate.onRelease = function() {
  20.                 var lvItem:LoadVars = new LoadVars();
  21.                 lvItem.item = this._parent.tItem.text;
  22.                 lvItem.number = this._parent.tNumber.text;
  23.                 if (this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].tNumber.text == 0) {
  24.                     lvItem.action = "delete";
  25.                 } else {
  26.                     lvItem.action = "update";
  27.                 }
  28.                 lvItem.sendAndLoad("/de/katalog/php/shoppingcard.php", lvItem, "POST");
  29.                 this.emptyContainerMC();
  30.                 this.showCard();
  31.             };
  32.             // Controller for "delete item" button
  33.             this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].mcDelete.onRelease = function() {
  34.                 var lvItem:LoadVars = new LoadVars();
  35.                 lvItem.item = this._parent.tItem.text;
  36.                 lvItem.action = "delete";
  37.                 lvItem.sendAndLoad("/de/katalog/php/shoppingcard.php", lvItem, "POST");
  38.                 this._parent._parent._parent._parent.emptyContainerMC();
  39.                 this._parent._parent._parent._parent.showCard();
  40.             };
  41.         }
  42.         // end of for
  43.         // ----------------------- <add "total price" mc to display> ------------------------------------------- \\
  44.         this.mcEmptyScrollPane.spEmpty.attachMovie("cardTotalPrice", "mcCardTotalPrice", 500);
  45.         this.mcEmptyScrollPane.spEmpty.mcCardTotalPrice._y = (30*_global.aCardItems.length)+70;
  46.         this.mcEmptyScrollPane.spEmpty.mcCardTotalPrice._x = 0;
  47.         this.mcEmptyScrollPane.spEmpty.mcCardTotalPrice.tTotalPrice.text = "";
  48.         this.mcEmptyScrollPane.spEmpty.mcCardTotalPrice.tTotalPrice.text = nTotalPrice;
  49.         // ------------------------ </add "total price" mc to display> ----------------------------------------- \\
  50.         // ---------------- <create button to go to the "terms section"> ---------------------------------------------------------------------------------------- \\
  51.         this.mcEmptyScrollPane.spEmpty.createClassObject(Button, "btTerms", 4);
  52.         this.onEnterFrame = function() {
  53.             delete this.onEnterFrame;
  54.             this.mcEmptyScrollPane.spEmpty.btTerms.label = "Ich erkläre mich mit den AGB einverstanden";
  55.             this.mcEmptyScrollPane.spEmpty.btTerms._width = 270;
  56.             this.mcEmptyScrollPane.spEmpty.btTerms._x = (_global.win.width-(this.mcEmptyScrollPane.spEmpty.btTerms._width+10));
  57.             this.mcEmptyScrollPane.spEmpty.btTerms._y = (_global.win.height-(this.mcEmptyScrollPane.spEmpty.btTerms._height+10));
  58.             // Event Handler for Terms
  59.             this.mcEmptyScrollPane.spEmpty.btTerms.onRelease = function() {
  60.                 //_global.win.content.mcCard.emptyContainerMC();
  61.                 this._parent._parent.gotoAndStop('form');
  62.             };
  63.             // ---------------- </create button to go to the next section> ------------------------- \\
  64.         };
  65.     };
  66. }
  67. function emptyContainerMC():Void {
  68.     this.mcEmptyScrollPane.spEmpty.removeMovieClip();
  69. }
  70. function getCardItems():Void {
  71.     // Get XML
  72.     var xmlItems:XML = new XML();
  73.     xmlItems.ignoreWhite = true;
  74.     xmlItems.onLoad = function(bSuccess:Boolean) {
  75.         if (bSuccess) {
  76.             //_global.aCardItems = new Array();
  77.             // delete previous array entries
  78.             var xnItem:XMLNode;
  79.             var xnName:XMLNode;
  80.             var xnDescription:XMLNode;
  81.             var xnPrice:XMLNode;
  82.             _global.bLoadedOK = true;
  83.             var xnRoot:XMLNode = this.firstChild;
  84.             for (var i = 0; i<xnRoot.childNodes.length; i++) {
  85.                 _global.aCardItems[i] = new Array();
  86.                 xnItem = xnRoot.childNodes[i];
  87.                 _global.aCardItems[i]['id'] = xnItem.attributes.id;
  88.                 _global.aCardItems[i]['number'] = xnItem.attributes.number;
  89.                 _global.aCardItems[i]['vpe'] = xnItem.attributes.vpe;
  90.                 xnName = xnItem.firstChild;
  91.                 _global.aCardItems[i]['name'] = xnName.firstChild.nodeValue;
  92.                 xnDescription = xnName.nextSibling;
  93.                 _global.aCardItems[i]['description'] = xnDescription.firstChild.nodeValue;
  94.                 xnPrice = xnDescription.nextSibling;
  95.                 _global.aCardItems[i]['ab1'] = xnPrice.attributes.ab1;
  96.                 _global.aCardItems[i]['ab4'] = xnPrice.attributes.ab4;
  97.                 _global.aCardItems[i]['ab6'] = xnPrice.attributes.ab6;
  98.                 _global.aCardItems[i]['ab12'] = xnPrice.attributes.ab12;
  99.                 _global.aCardItems[i]['discounted'] = xnPrice.attributes.discounted;
  100.                 // Berechnung des Rabbats und Gesamtpreises
  101.                 if (xnItem.attributes.number>=12) {
  102.                     _global.aCardItems[i]['single'] = xnPrice.attributes.ab12;
  103.                 } else if (xnItem.attributes.number>=6) {
  104.                     _global.aCardItems[i]['single'] = xnPrice.attributes.ab6;
  105.                 } else if (xnItem.attributes.number>=4) {
  106.                     _global.aCardItems[i]['single'] = xnPrice.attributes.ab4;
  107.                 } else {
  108.                     _global.aCardItems[i]['single'] = xnPrice.attributes.ab1;
  109.                 }
  110.             }
  111.         }
  112.     };
  113.     xmlItems.load("de/katalog/php/shoppingcard.php?action=details");
  114. }
  115. function showCard():Void {
  116.     this.attachMovie("emptyScrollPane", "mcEmptyScrollPane", 0);
  117.     this.getCardItems();
  118.     this.onEnterFrame = function() {
  119.         delete this.onEnterFrame;
  120.         this.addContentToContainer();
  121.     };
  122. }

Geändert von compuboy1010 (19-09-2005 um 11:49 Uhr)
compuboy1010 ist offline   Mit Zitat antworten
Alt 19-09-2005, 13:51   #6 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Was hat ein Test meines Vorschlages ergeben?
  Mit Zitat antworten
Alt 19-09-2005, 14:08   #7 (permalink)
... loves Japan!
 
Benutzerbild von compuboy1010
 
Registriert seit: Apr 2005
Ort: D'dorf; DE
Beiträge: 715
Hi, dein Vorschlag bewirkt das gleiche wie der Code oben. Aber anstatt zu kaskadieren teile ich die Funktionen lieber in eigenständige Module auf.

Jetzt gibt es nur noch ein Problem.
Wenn ich auf den mcDelete klicke, wird alles im Fenster gelöscht.
Außerdem scheint der Inhalt nicht in die ScrollPane spEMpty gepackt zu werden. Kann das Fenster die Artikel nicht halten ragen sie einfach aus dem Fenster heraus.

Warum?

ActionScript:
  1. _global.aCardItems = new Array();
  2. function addContentToContainer():Void {
  3.     // Add the Table header to "mcEmptyScrollPaneContainer"
  4.     this.mcEmptyScrollPane.spEmpty.attachMovie("cardHeader", "mcCardHeader", 200, {_x:2, _y:2});
  5.     this.onEnterFrame = function() {
  6.         delete this.onEnterFrame;
  7.         // add items to card display
  8.         _level0.tTest.text = _global.aCardItems.length;
  9.         var nTotalPrice:Number;
  10.         for (var i = 0; i<_global.aCardItems.length; i++) {
  11.             this.mcEmptyScrollPane.spEmpty.attachMovie("cardEntry", "mcCardEntry"+i, i, {_x:0, _y:(30*i)+70});
  12.             this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].tItem.text = _global.aCardItems[i]['id'];
  13.             this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].tName.text = _global.aCardItems[i]['name'];
  14.             this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].tNumber.value = Number(_global.aCardItems[i]['number']);
  15.             this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].tPrice.text = _global.aCardItems[i]['single'];
  16.             this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].tSubtotal.text = _global.aCardItems[i]['number']*Number(_global.aCardItems[i]['single']);
  17.             nTotalPrice += Number(this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].tSubtotal.text);
  18.             // Controller for "update" button
  19.             this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].btUpdate.onRelease = function() {
  20.                 var lvItem:LoadVars = new LoadVars();
  21.                 lvItem.item = this._parent.tItem.text;
  22.                 lvItem.number = this._parent.tNumber.text;
  23.                 if (this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].tNumber.text == 0) {
  24.                     lvItem.action = "delete";
  25.                 } else {
  26.                     lvItem.action = "update";
  27.                 }
  28.                 lvItem.sendAndLoad("/de/katalog/php/shoppingcard.php", lvItem, "POST");
  29.                 this._parent._parent._parent._parent.emptyContainerMC();
  30.                 this._parent._parent._parent._parent.getCardItems();
  31.              this._parent._parent._parent._parent.addContentToContainer();
  32.                 };
  33.             // Controller for "delete item" button
  34.             this.mcEmptyScrollPane.spEmpty["mcCardEntry"+i].mcDelete.onRelease = function() {
  35.                 var lvItem:LoadVars = new LoadVars();
  36.                 lvItem.item = this._parent.tItem.text;
  37.                 lvItem.action = "delete";
  38.                 lvItem.sendAndLoad("/de/katalog/php/shoppingcard.php", lvItem, "POST");
  39.                 this._parent._parent._parent._parent.emptyContainerMC();
  40.                 this._parent._parent._parent._parent.getCardItems();
  41.                 this.onEnterFrame = function() {
  42.                   delete this.onEnterFrame;
  43.                  this._parent._parent._parent._parent.addContentToContainer();
  44.                 };
  45.             };
  46.         }
  47.         // end of for
  48.         // ----------------------- <add "total price" mc to display> ------------------------------------------- \\
  49.         this.mcEmptyScrollPane.spEmpty.attachMovie("cardTotalPrice", "mcCardTotalPrice", 500);
  50.         this.mcEmptyScrollPane.spEmpty.mcCardTotalPrice._y = (30*_global.aCardItems.length)+70;
  51.         this.mcEmptyScrollPane.spEmpty.mcCardTotalPrice._x = 0;
  52.         this.mcEmptyScrollPane.spEmpty.mcCardTotalPrice.tTotalPrice.text = "";
  53.         this.mcEmptyScrollPane.spEmpty.mcCardTotalPrice.tTotalPrice.text = nTotalPrice;
  54.         // ------------------------ </add "total price" mc to display> ----------------------------------------- \\
  55.         // ---------------- <create button to go to the "terms section"> ---------------------------------------------------------------------------------------- \\
  56.         this.mcEmptyScrollPane.spEmpty.createClassObject(Button, "btTerms", 4);
  57.         this.onEnterFrame = function() {
  58.             delete this.onEnterFrame;
  59.             this.mcEmptyScrollPane.spEmpty.btTerms.label = "Ich erkläre mich mit den AGB einverstanden";
  60.             this.mcEmptyScrollPane.spEmpty.btTerms._width = 270;
  61.             this.mcEmptyScrollPane.spEmpty.btTerms._x = (this.width-(this.mcEmptyScrollPane.spEmpty.btTerms._width));
  62.             this.mcEmptyScrollPane.spEmpty.btTerms._y = (this.height-(this.mcEmptyScrollPane.spEmpty.btTerms._height));
  63.             // Event Handler for Terms
  64.             this.mcEmptyScrollPane.spEmpty.btTerms.onRelease = function() {
  65.                 this._parent._parent.gotoAndStop('form');
  66.             };
  67.             // ---------------- </create button to go to the next section> ------------------------- \\
  68.         };
  69.     }; // end this.onEnterFrame
  70. }
  71. function emptyContainerMC():Void {
  72.     this.mcEmptyScrollPane.spEmpty.unloadMovie();
  73. }
  74. function getCardItems():Void {
  75.     // Get XML
  76.     var xmlItems:XML = new XML();
  77.     xmlItems.ignoreWhite = true;
  78.     xmlItems.onLoad = function(bSuccess:Boolean) {
  79.         if (bSuccess) {
  80.             _global.aCardItems = new Array();
  81.             // delete previous array entries
  82.             var xnItem:XMLNode;
  83.             var xnName:XMLNode;
  84.             var xnDescription:XMLNode;
  85.             var xnPrice:XMLNode;
  86.             _global.bLoadedOK = true;
  87.             var xnRoot:XMLNode = this.firstChild;
  88.             for (var i = 0; i<xnRoot.childNodes.length; i++) {
  89.                 _global.aCardItems[i] = new Array();
  90.                 xnItem = xnRoot.childNodes[i];
  91.                 _global.aCardItems[i]['id'] = xnItem.attributes.id;
  92.                 _global.aCardItems[i]['number'] = xnItem.attributes.number;
  93.                 _global.aCardItems[i]['vpe'] = xnItem.attributes.vpe;
  94.                 xnName = xnItem.firstChild;
  95.                 _global.aCardItems[i]['name'] = xnName.firstChild.nodeValue;
  96.                 xnDescription = xnName.nextSibling;
  97.                 _global.aCardItems[i]['description'] = xnDescription.firstChild.nodeValue;
  98.                 xnPrice = xnDescription.nextSibling;
  99.                 _global.aCardItems[i]['ab1'] = xnPrice.attributes.ab1;
  100.                 _global.aCardItems[i]['ab4'] = xnPrice.attributes.ab4;
  101.                 _global.aCardItems[i]['ab6'] = xnPrice.attributes.ab6;
  102.                 _global.aCardItems[i]['ab12'] = xnPrice.attributes.ab12;
  103.                 _global.aCardItems[i]['discounted'] = xnPrice.attributes.discounted;
  104.                 // Berechnung des Rabbats und Gesamtpreises
  105.                 if (xnItem.attributes.number>=12) {
  106.                     _global.aCardItems[i]['single'] = xnPrice.attributes.ab12;
  107.                 } else if (xnItem.attributes.number>=6) {
  108.                     _global.aCardItems[i]['single'] = xnPrice.attributes.ab6;
  109.                 } else if (xnItem.attributes.number>=4) {
  110.                     _global.aCardItems[i]['single'] = xnPrice.attributes.ab4;
  111.                 } else {
  112.                     _global.aCardItems[i]['single'] = xnPrice.attributes.ab1;
  113.                 }
  114.             }
  115.         }
  116.     };
  117.     xmlItems.load("de/katalog/php/shoppingcard.php?action=details");
  118. }
  119. function showCard():Void {
  120.     this.attachMovie("emptyScrollPane", "mcEmptyScrollPane", 0);
  121.     this.getCardItems();
  122.     this.onEnterFrame = function() {
  123.         delete this.onEnterFrame;
  124.         this.addContentToContainer();
  125.     };
  126. }

Geändert von compuboy1010 (19-09-2005 um 14:14 Uhr)
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 04:27 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele