2012-04-13 4 views
0

Ich möchte EXTjs Klasse zu Json, aber ich kann nicht ..Wie aus Extjs.Class zu JSON String encodieren?

Ich benutze JSON.Stringify, aber das gibt Ausnahme mit Typ Fehler.

Wie kann ich das tun?

Danke und hier mein Code.

Ext.define('Text',{ 
    extend : 'Ext.Img', 
    x : 50, 
    y : 50, 
    size : 100, 
    text : 'Text', 
    name : 'Text', 
    src : ' ', 
    tag : '', 
    Events : [] 
}); 

var text = new Text(); 
var temp = JSON.stringify(text); 

Antwort

5

Das Problem hierbei ist, dass ExtJS interne Referenzen auf die Objekte erzeugt, die zyklisch entpuppen. Daher schlägt der standardmäßige JSON-Serializer fehl.

Sie müssen manuell eine toJSON Methode definieren, die durch JSON.stringify aufgerufen wird:

Ext.define('Text', { 
    extend : 'Ext.Img', 
    x : 50, 
    y : 50, 
    size : 100, 
    text : 'Text', 
    name : 'Text', 
    src : ' ', 
    tag : '', 
    Events : [], 

    toJSON: function() { 
     return 'Whatever you like' + this.text + this.size // etc. 
    } 

}); 

JSON.stringify(new Text()); // "Whatever you likeText100" 
+0

Das ist sehr sehr gut! Vielen Dank! –

7

Versuchen Sie es mit

Ext.encode(Object) 

es Codiert ein Objekt, ein Array oder ein anderer Wert & Die JSON-String zurückgibt.

siehe Ext.JSON

serialize object

+0

ich versucht, aber Fehler .. 'Auslöser Range: Maximale Call-Stack-Größe überschritten' –

+0

versuchen 'var gesehen = [] ; var temp = JSON.stringify (Text, Funktion (key, val) { if (typeof val == "Objekt") { if (seen.indexOf (val)> = 0) return undefined seen.push (val) } return val }); console.log (temp); ' – MMT

+0

Ja, habe ich diesen Kodex, aber den Fehler .. –