2017-02-22 4 views
2

Ich arbeite mit einem Slider-Builder, der etwa 10 Ebenen von Objekten und Arrays hat, um alle Daten zu speichern. Die ersten 4 sind so ziemlich immer gleich strukturiert, befinden sich aber in verschiedenen Arrays. Zum Beispiel:Kurzform zu tiefem Objektliteral?

Slides[thisSlide].layers[thisLayer].animationgroup[thisAnimationId].sequence[currentSegment].duration 

, wo ich zu einem bestimmten Zeitpunkt bin wahrscheinlich auf derselben Folie arbeiten, die gleiche Schicht, so dass ich dachte, dass ich einige Variablen erklären könnte wie:

var currentSlide = 0; 
var currentLayer = 0; 
var currentChild = "0"; 
var currentKeyframe = ""; 
    Slides.push({ 
    "background-color": "#aaaaaa", 
    "canvasHeight": "200", 
    "canvasWidth": "1000", 
    "layers": [] 
    }); 
var CSL = Slides[currentSlide].layers[currentLayer]; 
var CAG = Slides[thisSlide].layers[thisLayer].animationgroup[thisAnimationId]; 

am Anfang der Anwendung, die dann verwendet werden, um das erste Beispiel auf diese Weise Kurzschrift:

CAG.sequence[currentSegment].duration; 

es hat nicht funktioniert, wie ich es erwartet hatte. später, als ich mit ihm versucht, erhalte ich eine Beschwerde, die CSL nicht definiert ist, und doch sollte es im globalen Bereich sein:

function updateStuff(){ 
    for (i = 0; i < CSL.length; i++) { 
     //do something 
    } 
} 

ich meinen Code ein wenig, als ich auf sie zu verkürzen arbeiten nur versucht, mich zu und Dinge eliminieren, die nicht wirklich da sein müssen.

+0

Angenommen, das Objekt existiert auf allen diesen Ebenen, sehe ich kein Problem mit der Notation, die Sie gepostet haben. Sie sollten in der Lage sein, mit diesen Kurzschrift zu arbeiten – Rikin

+0

Dies sollte funktionieren, bis Sie keine * Schließung * auf der Variablen haben, die als Indizes in den Anweisungen verwendet werden. – Agalo

+0

Das war, was ich auch dachte, ich aktualisierte es, um zu zeigen, wo ich ein Problem habe. – Alan

Antwort

2

In Ihrem Beispiel hier:

var currentSlide = 0; 
var currentLayer = 0; 
var currentChild = "0"; 
var currentKeyframe = ""; 
    Slides.push({ 
    "background-color": "#aaaaaa", 
    "canvasHeight": "200", 
    "canvasWidth": "1000", 
    "layers": [] 
    }); 
var CSL = Slides[currentSlide].layers[currentLayer]; 

Es sieht aus wie die layers Array leer ist, so die Indizierung in die layers Array wird CSL in diesem Fall undefiniert zurück.

Wenn ein Objekt zu diesem Zeitpunkt definiert ist, erhalten Sie zwar einen Verweis auf dieses Objekt, aber wenn nichts definiert ist, wird CSL der "Werttyp" undefined ohne Bezug zugewiesen.

+0

Ich denke, dass dies mit einer Reihenfolge der Operationen zu tun haben kann. Es kann versuchen, alle Variablen in den Speicher zu laden, bevor die Informationen in das Objekt "Objektträger" verschoben werden. Wenn es so gemacht wird, gibt es überhaupt nichts in dem Objekt Slides [0], und so schlägt es fehl. Ich schaue mir an, wie ich das Problem umgehen kann, indem ich es später bei der Benutzerinteraktion aktualisiere. – Alan

Verwandte Themen