2017-05-30 8 views
0

Ich habe ein Objekt, das dynamisch erstellt wird und manchmal hat es die Eigenschaft theCtns.services["example"].expose Wer ist ein Array und manchmal hat es nicht. Es ist normal, dass es hier keine Fehler gibt.Wie fügt man einem Objekt eine Eigenschaft hinzu?

Dann habe ich eine Methode, die tun:

if($('#labelExpose').children().length > 1){ 
    $('#labelExpose').children('input').each(function (index) { 
    if(this.value){ 
     console.log("value of expose field number:" + index ); 
     console.log(this.value); 
     theCtns.services[ctn].expose[index] = this.value; 
    } 
    }); 
}else{ 
    delete theCtns.services[ctn].depends_on; 
} 

Aber ich habe folgende Fehler Uncaught TypeError: Cannot set property '0' of undefined, weil es nicht expose ist, aber es sollte es mit dem = this.value Recht schafft?

Also, wie kann ich dieses Problem lösen?

Antwort

1

Also ich bin ziemlich sicher, dass Ihr Problem ist, dass Sie zuerst die Eigenschaft erstellen und dann einen Wert dem ersten Index zuweisen müssen.

Versuchen Sie, diese Linie zu ersetzen:

theCtns.services[ctn].expose[index] = this.value; 

Mit diesen beiden Linien:

theCtns.services[ctn].expose = theCtns.services[ctn].expose || []; // if it already exists, it will set it to itself, if not it will set it to an empty array 
theCtns.services[ctn].expose[index] = this.value; // this will not set the item at that index 
+0

ich so versuchen, und ich komme hier zurück nach – Jerome

+0

Leider @Jerome, sagen Sie dies nicht funktioniert ? –

+0

Nein nein Ich teste mit Ihrer Antwort, aber ich brauche 10min zum Testen – Jerome

0

Hier ist derCtns.services [ctn] .expose nicht definiert, deshalb erhalten Sie diesen Fehler. Um diesen Fehler zu vermeiden, können Sie einen Scheck wie

if(theCtns.services[ctn].expose) { 
    theCtns.services[ctn].expose[index] = this.value; 
} 

hinzufügen Oder sollten Sie definieren theCtns.services [ctn] .expose, bevor Sie einen Wert zuweisen.

Verwandte Themen