Имеется JSON:
{
"elements": {
"group": {
"tmpl": "tmpl-group",
"params": [{
"name": "main1",
"values": ["a", "b"]
}, {
"name": "label1",
"value": "id",
"readonly": true
}]
},
"el": {
"tmpl": "tmpl-el",
"params": [{
"name": "main1",
"values": ["a", "b"]
}, {
"name": "label1",
"value": "id",
"readonly": true
}, {
"name": "text1",
"defvalue": ""
}]
}
},
"xdata": [{
"id": 44,
"type": "group",
"paramvalues": ["a"],
"children": [{
"id": 14,
"type": "el",
"paramvalues": ["b", "name1"]
}]
}, {
"id": 38,
"type": "el",
"paramvalues": ["a", "name2"]
}]
}
Пытаюсь создать новый объект из ветки xdata так, чтоб занести описание типов из ветки elements (это типы) в дерево элементов в xdata. Но когда хочу получить ветку из JSON вылетает ошибка Uncaught TypeError: Cannot read property 'xdata' of undefined. Как будто не задано свойство this.loadedJSON.
Это только в хроме. В FF через debugger firebug-a проверял - все срабатывает без ошибок.
Вот на скрине дебаггер с результирующим объектом
function myobj() {
this.loadedJSON;
this.objtree;
};
myobj.prototype.loadJSON = function()
{
var that = this;
$.getJSON('json/test.json', function(data) {
that.loadedJSON = data;
}).fail(function() {
console.log("Ошибка JSON")
});
return this.loadedJSON;
}
myobj.prototype.prepareJSON = function()
{
var json = this.loadedJSON;
var x = json.xdata; // Uncaught TypeError: Cannot read property 'xdata' of undefined
var y = json.elements;
function cc(obj) {
var accum = [];
for (var i = 0; i < obj.length; i++) {
accum[i] = jQuery.extend(true, {}, obj[i]);
accum[i].index = i;
accum[i].t = jQuery.extend(true, {}, y[obj[i].type].params);
accum[i].tmpl = y[obj[i].type].tmpl.toString();
if (obj[i].children)
accum[i].children = cc(obj[i].children);
}
return accum;
};
this.objtree = cc(x);
}
x = new ft();
x.loadJSON();
x.prepareJSON();
Возможно код не очень адекватный, но я только учусь )