2014-04-06 55 views
0

我有一個js文件這行代碼正確顯示沒有正確渲染。怎麼了?斷線元素沒有被腳本

這段代碼來自一個sigma.js圖形樣本,該樣本生成關於節點懸停的工具提示。

這裏是代碼的其餘部分:

sigma.canvas.hovers.def = function (node, context, settings) { 
    var x, 
     y, 
     w, 
     h, 
     e, 
     fontStyle = settings('hoverFontStyle') || settings('fontStyle'), 
     prefix = settings('prefix') || '', 
     size = node[prefix + 'size'], 
     fontSize = (settings('labelSize') === 'fixed') ? 
      settings('defaultLabelSize') : 
      settings('labelSizeRatio') * size; 

    // Label background: 
    context.font = (fontStyle ? fontStyle + ' ' : '') + 
     fontSize + 'px ' + (settings('hoverFont') || settings('font')); 

    context.beginPath(); 
    context.fillStyle = settings('labelHoverBGColor') === 'node' ? 
     (node.color || settings('defaultNodeColor')) : 
     settings('defaultHoverLabelBGColor'); 

    if (settings('labelHoverShadow')) { 
     context.shadowOffsetX = 0; 
     context.shadowOffsetY = 0; 
     context.shadowBlur = 8; 
     context.shadowColor = settings('labelHoverShadowColor'); 
    } 

    if (typeof node.label === 'string') { 
     x = Math.round(node[prefix + 'x'] - fontSize/2 + 20); 
     y = Math.round(node[prefix + 'y'] - fontSize/40 - 80); 
     w = Math.round(
      context.measureText("lable: " + node.label).width + fontSize/2 + size + 7 
     ); 
     h = Math.round(fontSize + 70); 
     e = Math.round(fontSize/20 + 1); 

     context.moveTo(x, y + e); 
     context.arcTo(x, y, x + e, y, e); 
     context.lineTo(x + w, y); 
     context.lineTo(x + w, y + h); 
     context.lineTo(x + e, y + h); 
     context.arcTo(x, y + h, x, y + h - e, e); 
     context.lineTo(x, y + e); 

     context.closePath(); 
     context.fill(); 

     context.shadowOffsetX = 0; 
     context.shadowOffsetY = 0; 
     context.shadowBlur = 0; 
    } 

    // Node border: 
    if (settings('borderSize') > 0) { 
     context.beginPath(); 
     context.fillStyle = settings('nodeBorderColor') === 'node' ? 
      (node.color || settings('defaultNodeColor')) : 
      settings('defaultNodeBorderColor'); 
     context.arc(
      node[prefix + 'x'], 
      node[prefix + 'y'], 
      size + settings('borderSize'), 
      0, 
      Math.PI * 2, 
      true 
     ); 
     context.closePath(); 
     context.fill(); 
    } 

    // Node: 
    var nodeRenderer = sigma.canvas.nodes[node.type] || sigma.canvas.nodes.def; 
    nodeRenderer(node, context, settings); 

    // Display the label: 
    if (typeof node.label === 'string') { 
     context.fillStyle = (settings('labelHoverColor') === 'node') ? 
      (node.color || settings('defaultNodeColor')) : 
      settings('defaultLabelHoverColor'); 

     context.fillText(
     "label: " + node.label + "<br/>" + "id: " + node.id + "<br/>" + "size: " + node.size, 

     Math.round(node[prefix + 'x'] + size + 10), 
      Math.round(node[prefix + 'y'] - 60) 
     ); 
    } 
}; 
+0

什麼是您預期的輸出? – dikesh

+0

它看起來像你試圖在字符串中使用jQuery對象'$('
')''。我不確定你的代碼在做什麼,但是隻用'
'試一下(不要把它包裝在$()) –

+0

或者嘗試使用''\ n'' – doniyor

回答

2

$('<br/>')產生DOM對象用於br元件。如果你想添加一個br元素,你正在建設一個字符串,只需使用"<br/>"

"label: " + node.label + "<br/>" + "id: " + node.id + "<br/>" + "size: " + node.size 

至於爲什麼你的輸出有「node.label」,而不是一些實際的價值,你的猜測是和我一樣好,因爲你沒有向我們展示足夠的代碼來解決這個問題。

+0

我將所有代碼添加到問題中。我的代碼是sigma js圖形樣本的一部分。它生成節點的工具提示。 – hossein

+0

謝謝。看完你的代碼後,我仍然不確定爲什麼你的輸出中有「node.label」(如果它實際上),但是我有回答你的問題嗎? – JLRishe

0

如果@ JLRishe的解決方案有效,我很高興。如果沒有,你可以嘗試這樣的:

"label: " + node.label + '\n' + "id: " + node.id + '\n' + "size: " + node.size 

所以\n代替<br/>