2012-02-16 139 views
1

我终于得到了我的节点几乎完全可以做到的,不幸的是我有一个问题更修复节点宽度和高度Spacetree

enter image description here

什么是对得出的宽度画布不是定义节点的宽度。蓝色+紫色是节点div +填充,如果不是因为绘制的内容不关心我为此设置的宽度,我可以使用它来完美地居中。这里是我的spacetree代码:

 function jitSpaceTree(data,index,rootid){ 
      var json = eval("(" + data + ")"); 
      console.log(json); 
      //end 
      //init Spacetree 
      //Create a new ST instance 
      var st = new $jit.ST({ 
       //id of viz container element 
       injectInto: 'hier'+index, 
       //set duration for the animation 
       duration: 800, 
       //set animation transition type 
       transition: $jit.Trans.Quart.easeInOut, 
       //set distance between node and its children 
       levelDistance: 25, 
       orientation: 'top', 
       //enable panning 
       Navigation: { 
       enable:true, 
       panning:true 
       }, 
       //set node and edge styles 
       //set overridable=true for styling individual 
       //nodes or edges 
       Node: { 
        autoHeight: true, 
        autoWidth: true, 
        type: 'rectangle', 
        color: '#aaa', 
        overridable: true 
       }, 

       Edge: { 
        type: 'bezier', 
        overridable: true 
       }, 

       //This method is called on DOM label creation. 
       //Use this method to add event handlers and styles to 
       //your node. 
       onCreateLabel: function(label, node){ 
        label.id = node.id;    
        label.innerHTML = node.name; 
        label.onclick = function(){ 
         st.onClick(node.id); 
         st.select(node.id); 
         st.removeSubtree(label.id, false, "replot", { 
          hideLabels: false 
         }); 
         jQuery.getJSON('Mobile_Subordinate.cfm?Empid='+node.id, function(data2) { 
          var subtree = ''; 
          for(var i=0; i<data2.DATA.length-1; i++){ 
           subtree = subtree + '{"id": "' + data2.DATA[i][4].replace(/\s/g, '') + '","name": "' + data2.DATA[i][0].replace(/\s/g, '') + '<br>' + data2.DATA[i][1].replace(/\s/g, '') + '","data": {},"children": []},'; 
          } 
          subtree = subtree + '{"id": "' + data2.DATA[data2.DATA.length-1][4].replace(/\s/g, '') + '","name": "' + data2.DATA[data2.DATA.length-1][0].replace(/\s/g, '') + '<br>' + data2.DATA[data2.DATA.length-1][1].replace(/\s/g, '') + '","data": {},"children": []}'; 
          subtree = '{"id": "'+label.id+'", "children": ['+ subtree +']}' 
          childData = jQuery.parseJSON(subtree); 
          console.log(childData); 
          st.addSubtree(childData, 'replot',{ 
           hideLabels: false 
          }); 
         }); 
        }; 

        //set label styles 
        var style = label.style; 
        style.width = node.data.offsetWidth; 
        style.height = node.data.offsetHeight;    
        style.cursor = 'pointer'; 
        style.color = '#fff'; 
        style.fontSize = '0.8em'; 
        style.textAlign= 'center'; 
       }, 

       //This method is called right before plotting 
       //a node. It's useful for changing an individual node 
       //style properties before plotting it. 
       //The data properties prefixed with a dollar 
       //sign will override the global node style properties. 
       onBeforePlotNode: function(node){ 
        //add some color to the nodes in the path between the 
        //root node and the selected node. 
        if (node.selected) { 
         node.data.$color = "#ab8433"; 
        } 
        else { 
         delete node.data.$color; 
         node.data.$color = "#ccc"; 
        } 
       }, 

       //This method is called right before plotting 
       //an edge. It's useful for changing an individual edge 
       //style properties before plotting it. 
       //Edge data proprties prefixed with a dollar sign will 
       //override the Edge global style properties. 
       onBeforePlotLine: function(adj){ 
        if (adj.nodeFrom.selected && adj.nodeTo.selected) { 
         adj.data.$color = "#eed"; 
         adj.data.$lineWidth = 3; 
        } 
        else { 
         delete adj.data.$color; 
         delete adj.data.$lineWidth; 
        } 
       } 
      }); 
      //load json data 
      st.loadJSON(json); 
      //compute node positions and layout 
      st.compute(); 
      //optional: make a translation of the tree 
      st.geom.translate(new $jit.Complex(-200, 0), "current"); 
      //emulate a click on the root node. 
      //st.onClick(st.root); 
      st.onClick(rootid); 
      //end 

     } 

我错过了什么?

回答

0

不是一个确切的答案,但这可能是一个填充问题?

我知道从我自己的经验,

Node: { 
height: 80, 
width: 140 
} 

需求...

{style.width = 136 + 'px'; 
style.height = 75 + 'px';    
style.paddingTop = '5px'; 
style.paddingLeft = '2px'; 
style.paddingRight = '2px';} 

到中心对齐。

我想知道是否有缺少的缺省填充?

+0

不幸的是,我不再与该公司合作,所以我不能真正尝试任何东西。我记得的是节点的背景颜色只是通过div + padding渗出。 – Rob 2013-10-02 14:17:41