2014-02-25 68 views
1

正如標題所說,我不能讓圖形顯示在我的asp.NET頁面上的「MainContent」佔位符內。如果我將選擇從「MainContent」更改爲「body」,則圖形確實顯示在頁面的底部。d3.js圖形不在asp.net頁面上顯示

代碼片斷:

變種W = 960, H = 500, R = 30, 填充= d3.scale.category20();

var force = d3.layout.force() 
     .charge(-120) 
     .linkDistance(60) 
     .size([w, h]); 

    var svg = d3.select("body").append("svg:svg") 
     .attr("width", w) 
     .attr("height", h); 

    d3.json("graph.json", function (json) { 
     var link = svg.selectAll("line") 
      .data(json.links) 
      .enter().append("svg:line"); 

     var node = svg.selectAll("g myCircleText") 
      .data(json.nodes) 

     var elemEnter = node.enter() 
      .append("g") 

     elemEnter.append("text") 
      //.attr("dx", function (d) { return -20 }) 
      .text(function (d) { return d.name }) 

     var circle = elemEnter.append("circle") 
      .attr("r", r) 
      .style("fill", function (d) { return fill(d.group); }) 
      .style("stroke", function (d) { return d3.rgb(fill(d.group)).darker(); }) 
      .call(force.drag); 

     force 
      .nodes(json.nodes) 
      .links(json.links) 
      .on("tick", tick) 
      .start(); 

     function tick(e) { 

      // Push sources up and targets down to form a weak tree. 
      var k = 6 * e.alpha; 
      json.links.forEach(function (d, i) { 
       d.source.y -= k; 
       d.target.y += k; 
      }); 

      circle.attr("cx", function (d) { return d.x; }) 
       .attr("cy", function (d) { return d.y; }); 

      link.attr("x1", function (d) { return d.source.x; }) 
       .attr("y1", function (d) { return d.source.y; }) 
       .attr("x2", function (d) { return d.target.x; }) 
       .attr("y2", function (d) { return d.target.y; }); 
     } 
    });` 

我不能讓文字到多媒體每個節點上,我已經做了相當多的搜索,但還沒有解決任何問題。

更新: 我設法讓文本顯示在我的圖表中。但是文本不會顯示在圓圈內,而是顯示在svg容器的左上角。我已經更新了代碼片段以反映這一點。

UPDATE 2: 我現在將圖顯示在正確的位置。解決方案與將腳本放入div中一樣簡單,然後在腳本中選擇div。我仍然沒有想出如何在一個圓圈內顯示文本。

+0

儘量提供一個最小的節點,你在做什麼工作的代碼。請告訴我們爲什麼你認爲這與ASP鏈接(它不應該,D3.js是純粹的前端) – AsTeR

+0

上述代碼正在工作,但不顯示圖形,除非我將選定的d3區域更改爲「正文」 。林不知道這個問題是與asp相關的,但我沒有看到任何理由爲什麼它不會在內容佔位符中顯示。 – Cathal

+0

你能告訴我們ASP生成的HTML嗎? –

回答

0

問題解決了,希望這可以幫助有人在類似的位置。繼承人我的解決方案。我打開糾正這是否是一個構造良好的解決方案,但它適用於我。

編輯 如果有人知道如何添加標記到每行的結尾,我將不勝感激您的輸入!

代碼片段:

  var w = 960, 
      h = 500, 
      r = 35, 
      fill = d3.scale.category20(); 

     var force = d3.layout.force() 
      .charge(-500) 
      .linkDistance(180) 
      .size([w, h]); 

     var svg = d3.select("#chart").append("svg:svg") 
      .attr("width", w) 
      .attr("height", h); 

     d3.json("graph.json", function (json) { 
      var link = svg.selectAll("line") 
       .data(json.links) 
       .enter().append("svg:line"); 

      var circle = svg.append("g").selectAll("circle") 
       .data(json.nodes) 
       .enter().append("circle") 
       .attr("r", r) 
      circle.style("fill", "#2185c5") 
       .call(force.drag); 

      var text = svg.append("g").selectAll("text") 
       .data(json.nodes) 
       .enter().append("text") 
       .attr("text-anchor", "middle") 
      text.style("fill", "black") 
      text.style("font-weight", "900") 
       //.call(force.drag) 
       .text(function (d) { return d.name; }); 

      force 
       .nodes(json.nodes) 
       .links(json.links) 
       .on("tick", tick) 
       .start(); 

      function tick(e) { 

       // Push sources up and targets down to form a weak tree. 
       var k = 6 * e.alpha; 
       json.links.forEach(function (d, i) { 
        d.source.y -= k; 
        d.target.y += k; 
       }); 

       circle.attr("transform", transform); 
       text.attr("transform", transform); 



       link.attr("x1", function (d) { return d.source.x; }) 
        .attr("y1", function (d) { return d.source.y; }) 
        .attr("x2", function (d) { return d.target.x; }) 
        .attr("y2", function (d) { return d.target.y; }); 
      } 

      function transform(d) { 
       return "translate(" + d.x + "," + d.y + ")"; 
      } 
     });