Исправить ширину и высоту узла в Spacetree из набора инструментов Javascript Infovis. - PullRequest
1 голос
/ 16 февраля 2012

Я наконец-то почти полностью выполнил мои узлы, к сожалению, у меня возникла еще одна проблема

enter image description here

ширина того, что нарисовано на холсте, не является шириной определенного узла. Синий + фиолетовый - это узел div + padding, и я мог бы идеально отцентрировать его, используя это, если бы не тот факт, что нарисованное не заботится о ширине, которая у меня есть для этого. Вот мой код для моего космического дерева:

        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

        }

Чего мне не хватает?

1 Ответ

0 голосов
/ 02 октября 2013

Не точный ответ, но может ли это быть проблемой заполнения?

Я знаю по собственному опыту, что

Node: {
height: 80,
width: 140
}

нужно ...

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

по центру.

Интересно, есть ли отступ по умолчанию, который вам не хватает?

...