Попытка выполнить итерацию Json в массиве Javascript для последующего ввода в диаграмму Treant js - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь перебрать файл Json, используя Javascript / jQuery (у меня нет контроля над файлом Json, поэтому я не могу просто импортировать его прямо в Treant js), преобразовать его в массив Javascript, а затем передать его в Treant js.

Проблема, которую я получаю, заключается в том, что она не понимает родительские ссылки. Это мой код:

var config = {
    container: "#myChart",
    rootOrientation: 'WEST',
    levelSeparation: 100,
    siblingSeparation: 10,
    connectors: {
        type: 'stright',
        style: {
            "stroke": '#c7c7c7',
            "stroke-width": 1
        }
    },
    node: {
        HTMLclass: 'nodeStyle'
    },
}

chart_config = [config];

$.getJSON('myFile.json', function(data) {
    rootLevel = {};
    rootLevel["text"] = { "name": data.something };
    rootLevel["image"] = data.somethingImage;

    chart_config.push(rootLevel);

    $.each(data.root.secondLevel, function(i, v) {
        var iName = v.something;
        var iKey = iName + "-" + i;
        window[iKey] = {};
        window[iKey]["parent"] = rootLevel;
        window[iKey]["text"] = { "name": iName };
        window[iKey]["stackChildren"] = true;

        chart_config.push(window[iKey]);
    });
}).done(function() {
    new Treant(chart_config);
});

Я получаю ошибку

Uncaught TypeError: Cannot read property 'join' of undefined
at Tree.getPathString (Treant.js:1040)
at Tree.setConnectionToParent (Treant.js:892)
at Tree.positionNodes (Treant.js:817)
at Tree.positionTree (Treant.js:509)
at Treant.js:533

Я думаю, что происходит, потому что я не объявляю массив все в одном go:

EG:

rootLevel = {
    text: {
        name: "stuff",
    },
},
secondLevel = {
    parent: rootLevel,
    text: {
        name: "things",
    },
} //..... etc

Непонятно родительское связывание.

В качестве теста я также попробовал

window[iKey]["parent"] = chart_config[1];

Но это бросает та же ошибка.

Если я сделаю console.log(chart_config) в конце, массив выглядит нормально. Я смею сказать, что ответ прост, но он ускользает от меня.

Заранее спасибо.

1 Ответ

1 голос
/ 10 января 2020

Погружен в код getPathString на line 1040 на gitHub

Вы сделали опечатку:

type: 'stright', => type: 'straight',

Из треанта. js:

else {  // NORMAL CHILDREN
    if ( connType === "step" ) {
        pathString = ["M", sp, 'L', p1, 'L', p2, 'L', ep];
    }
    else if ( connType === "curve" ) {
        pathString = ["M", sp, 'C', p1, p2, ep ];
    }
    else if ( connType === "bCurve" ) {
        pathString = ["M", sp, 'Q', p1, pm, 'T', ep];
    }
    else if (connType === "straight" ) {
        pathString = ["M", sp, 'L', sp, ep];
    }
}
return pathString.join(" ");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...