2016-05-16 6 views
0

[UPDATE]: es stellt sich heraus, dass die npm-Version D3 nicht funktioniert, ich auf CDN-Version ändern, und alles funktioniert, aber ich frage mich immer noch was mit require ("d3 „)Warum d3 funktioniert nicht in NW.js


Alle:

ich bin ziemlich neu in NW.js, zur Zeit versuche ich, D3 in ihm zu benutzen, aber auch die grundlegende d3.select kann nicht funktionieren, eine Idee? Das einzige, was die Arbeit mit select ist d3.select("body")

<div id="app"></div> 

<script> 
var d3 = require("d3"); 
function barChart(){ 

    var width, height; 

    function render(root){ 


     root.append("svg") 
      .attr({ 
       width:width, 
       height:height 
      }) 
      .append("rect") 
      .attr({ 
       width: 0.5*width, 
       height: 0.5*height 
      }) 
      .style({ 
       fill:"red" 
      }) 



    } 

    render.width = function(value){ 
     if(value != undefined){ 
      width = value; 
      return render; 
     } 
     return width; 
    } 
    render.height = function(value){ 
     if(value != undefined){ 
      height = value; 
      return render; 
     } 
     return height; 
    } 



    return render; 
} 


// this does not work 
var root = d3.select("#app"); 
var chart = barChart(); 
chart.width(400).height(400) 
chart(root); 

</script> 

Dank

Antwort

1

Sie Last d3 in NodeJS Kontext. Versuchen Sie es in Browser Kontext zu laden:

<script src="js/dependencies/d3.min.js"></script> 
+0

Danke, also meinst du ich kann nicht so wie require ("d3") mit DOM arbeiten? – Kuan

+0

DOM ist Teil des Browserkontextes, nicht des Knotenkontexts. Im Knotenkontext haben Sie kein DOM und alle anderen Browser-APIs (weil es Knoten ist). Sie können jedoch mit DOM aus dem Knotenkontext arbeiten, indem Sie DOM-Elemente im Knotenkontext übertragen. Wie auch immer, wenn du browser lib benutzen willst - lade es im Browserkontext. Wenn Knoten lib - Laden Sie es im Knoten Kontext. Einige Bibliotheken können im Knoten und im Browser gut arbeiten - moment.js zum Beispiel. – VoidVolker

+0

Danke, eine Sache, die ich nicht herausgefunden habe, ist, wie kann ich die Abhängigkeit verwalten, wenn ich sie einfach ohne Nachdenken einschließe? – Kuan

2

Ich installierte d3npm mit und hatte dies zu schreiben, um es Arbeit zu bekommen:

win.on('loaded', function() { 
    d3_root = d3.select(document); 
}); 

Jetzt habe ich d3_root.select() statt d3.select verwenden können.

Wie ich verstehe, ist es wegen nwjs Kontext, Sie arbeiten auf der Seite "Server" in Ihrem Skript, so dass Sie zuerst Dokument auswählen müssen. Wenn Sie Code direkt in HTML-Datei schreiben d3.select() sollte OK sein.

+0

Danke, weißt du warum? – Kuan

+1

Wieder. NWJS haben 2 Kontexte: Knotenkontext und Browserkontext. Browser-Kontext ist alle