Подтвердить что ты не робот

Настройка инструментария визуализации JavaScript Spacetree Node

Я видел, что многие люди рекомендуют JavaScript Visualization Toolkit (JIT) для организационной диаграммы. Я пытаюсь использовать SpaceTree JavaScript InfoVis Toolkit для организационной диаграммы. Узлы в моей диаграмме org - это как компонент, который сам по себе имеет профиль профиля сотрудника, два разных значка, которые отображают накладки на клике и некоторые три строки простого текста, имеющие имя, заголовок и количество отчетов... каждая строка разделяется по легкой горизонтальной линии. Что-то вроде:

Мой вопрос в том, можно ли настраивать узлы spacetree до такой степени? Могу ли я иметь Node почти как другой "компонент" или объект JavaScript, который имеет свой собственный метод рендеринга?

Я исследовал на форумах и некоторые варианты, которые я рассматривал:

  • $jit.ST.NodeTypes.implement()... но на основе примеров, которые я видел, это похоже, помогают в настройке Node с точки зрения форм и т.д., но а не как схема, изображенная выше. Я имею в виду настройку что-то вроде: http://groups.google.com/group/javascript-information-visualization-toolkit/browse_thread/thread/a4a059cbeb10ba23/ebf472366cdbbdef?lnk=gst&q=spacetree+nodetype#ebf472366cdbbdef
  • Я попытался установить innerHtml в методе onCreateLabel в example5.js по адресу: но, похоже, ничего не делает. Хотя, я не уверен, что будет хорошим способом настройки Node. Пример 5 находится на веб-сайте JIT (мне не разрешено размещать более одной гиперссылки).
  • Расширение Graph.Node... Я все еще рассматриваю этот параметр, и он этот момент времени, я не знаю, насколько сложно иметь пространство tree use Graph.myNode и что будет выглядеть Graph.myNode? я нужно больше думать об этих строках и посмотреть, возможно ли это даже.
4b9b3361

Ответ 1

Spacetree можно настроить очень сильно. Узлы могут отображать изображения или все, что мы хотим. У нас могут быть пользовательские события click для узлов. Чтобы иметь пользовательские события, вам нужно будет перерисовать все дерево в событии onclick.

Вот пример. О функции успеха события click. Здесь я назвал событие click на классе "clickable"

      $.ajaxSetup({ cache: false });             
           $(".clickable").live("click", function () {              
            $.ajax({
                url: url + "?id=" + parentId + "&ts=" + new Date().getMilliseconds(),
                type: "POST",
                cache: false,
                dataType: "html",
                success: function (html) {                       
                    init(html);                        
                }
              });
            });

Свойство name может использоваться для создания изображения следующим образом:

{id:"90", name:"<a href='javascript:;' class='clickable' name='90'><img src='images/picture.gif' width='30' height='30' alt='pic' /></a>", data:{}, children:[]}

Отметьте как ответ, если это полезно. спасибо.

Ответ 2

Вы можете сделать yourNode прототипом предка Graph.node, настроить нужные слоты, а затем добавить соответствующие настройки визуализации/принудительного кода.

Ответ 3

Я использую spacetrees, и я просто устанавливаю тип метки в HTML (который по умолчанию), и вы можете просто использовать обычные HTML и CSS для стилизации ваших ярлыков. У меня есть изображения, ссылки, текст и т.д.

Обратите внимание, что вы работаете с меткой, а не с node. node - компонент графа; метка является визуальным, который вы видите, который представляет node.

Когда вы инициализируете проход spacetree в функции для "onCreateLabel":

var myOnCreateLabel = function(label, node) {
  label.onclick = function(event) {/* setup onclick handler */};
  label.innerHTML = "<img src='myImage.png' />"; // use image in label
};
var myST = new $jit.ST({/*other settings*/ onCreateLabel: myOnCreateLabel});

Ответ 4

если вы не против работать с HTML5/Canvas, попробуйте также http://orgplot.codeplex.com, простую поддержку интерфейса image node также.

Ответ 5

 this.st=new $jit.ST(

{

            onCreateLabel: function (label, node)
            {
                var labelContent = $('<table cellpadding="0" cellspacing="0" class="nodeContainer"><tr><td>' +
                    '<div class="buttonContainer">' +
                    '</div></td></tr><tr><td>' +
                    '<table  class="nodeBox" cellpadding="0" cellspacing="0">' +
                    '<tr>' +
                    '<td class="iconTd"></td>' +
                    '<td class="center nodeName">' + node.name + '</td>' +
                    '</tr></table>' +
                    '</td></tr></table>');
                thisObject.onCreateLabel.raise(thisObject, { labelContent: labelContent, node: node });
                if (node.data && node.data.Icon && node.data.Icon != "")
                {
                    labelContent.find(".iconTd").append($("<img src='" + node.data.Icon + "' alt=''>"));
                }
                else
                {
                    labelContent.find(".iconTd").remove();
                }

                var lblCtl = $(label).append(labelContent);

                if (node.data.Data.ChildrenCount)
                {
                    labelContent.append("<tr><td class='subnode'></td></tr>");
                }
                if (node.name.length > 40)
                {
                    lblCtl.attr("title", node.name);
                    node.name = node.name.substr(0, 37);
                    node.name = node.name + "...";
                }                        
                lblCtl.click(function (sender)
                {
                    //thisObject.isNodeClicked = true;
                    var target = $(sender.target);
                    if (!target.hasClass("subnode"))
                    {
                        if (thisObject.currentSelectedNode)
                        {
                            thisObject.currentSelectedNode.buttonContainer.hide();
                        }
                        var btnContainer = labelContent.find(".buttonContainer");
                        thisObject.currentSelectedNode = { nodeElement: lblCtl, node: node, buttonContainer: btnContainer, event: sender };
                        btnContainer.append(thisObject.$globalButtonContainer.show()).show();
                        var button = target.closest(".chartActionButton");
                        if (button.length > 0)
                        {
                            thisObject.onNodeAction.raise(thisObject, { name: button.attr("name"), nodeElement: lblCtl, node: node, button: target });
                        }
                        else
                        {
                            thisObject.onNodeClick.raise(thisObject, thisObject.currentSelectedNode);
                        }
                    }
                    else
                    {
                        thisObject.st.onClick(node.id);
                    }
                });
                label.id = node.id;
                //set label styles
                thisObject.setNodeStyle(node.data.Style, label.style);
            }

});