2016-04-16 2 views
2

Я пытаюсь отобразить на стороне сервера график направленного усилия 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, не делая этого так?

ответ

1

Исправлено из-за снятия окружающего page.includeJs блока и заменено на page.injectJs('d3.v3.min.js');

Смежные вопросы