Я пытаюсь отобразить на стороне сервера график направленного усилия D3.js (из-за размера используемого набора данных) и выводить его как набор координат стабильное состояние графика, т. е. когда большая часть вычислений силы тяжести завершена. На данный момент я использую XMLSerlaizer.Вывод SVG-графика из D3.js Использование Phantomjs
Всякий раз, когда я запускаю страницу из командной строки с помощью phantomjs, она почти как функция, вызывающая графический чертеж, никогда не используется. Я думал, что это может быть из-за отсутствия page.onConsoleMessage
, который я добавил, но все же единственный выход, который я получаю консольные сообщения вне функции, которую я хочу оценить.
var page = require('webpage').create();
page.content = '<html><body></body></html>';
console.log("before");
page.includeJs('https://d3js.org/d3.v3.min.js', function() {
page.onConsoleMessage = function(msg) {
console.log("Message:" + msg);
};
console.log("p");
var html = page.evaluate(function() {
var body = d3.select('body');
var data = {
"nodes":[
{"name":"Steve"},
{"name":"Dave"},
{"name":"Matt"},
],
"links":
[{"source":0, "target":1},
{"source":1, "target":2},
{"source":2, "target":0}
]
}
var force = d3.layout.force()
.charge(-140)
.linkDistance(2)
.size([500, 500])
.nodes(data.nodes)
.links(data.links)
.start();
var svg = body.
.append('svg')
.attr("width", 500)
.attr("height", 500)
.attr("id", "svg");
...
...Graph drawing code
...
var s = new XMLSerializer();
return s.serializeToString(document.querySelector('svg'));
});
console.log(html);
console.log(page.content);
phantom.exit(); //Never gets called, "after" is printed
});
console.log("after");
phantom.exit();
Так что мой вопрос, как я могу работать и выводить значения функции рисования графа внутри page.includeJs...
?
Спасибо, что нашли время, чтобы прочитать мой вопрос.
EDIT
Если я удалить окружающий page.includeJs('https://d3js.org/d3.v3.min.js', function() {});
я получаю сообщения консоли вплоть до того момента, когда этот Javascript должен быть включен. Как включить d3.js, не делая этого так?