Search code examples
javascriptkendo-uitelerikdiagram

How do you influence position of connectors in a heirarchical Kendo UI Diagram


I am building an organisation chart using Kendo UI's diagramming component

I do not want the user to be able to edit the diagram as it is a read-only representation of positions they have entered previously, however I do want to display the diagram in a particular way.

The layout type I am using is tree with subtype of down. I am using the HeirarchicalDataSource as the dataSource

The default way the diagram is drawn looks like this:

kendo-default-diagram

However, my boss needs it to look like this:

enter image description here

So the parent nodes have all child nodes coming from the bottom connector.

I see no way to programmatically influence this. Please help.


Solution

  • Switching editing off is easy, just pass to your options editable: false. To have the layout similar to what you posted, play with two variables: horizontalSeparation, verticalSeparation under layout

    http://dojo.telerik.com/uNOVa/2

      function createDiagram() {
        $("#diagram").kendoDiagram({
          editable: false,
          dataSource: {
            data: diagramNodes(),
            schema: {
              model: {
                children: "items"
              }
            }
          },
          layout: {
            type: "tree",
            subtype: "down",
            horizontalSeparation: 60,
            verticalSeparation: 40
          },
          shapeDefaults: {
            width: 40,
            height: 40
          }
        });
      }
    
      function diagramNodes() {
        var root = { name: "0", items: [] };
        addNodes(root, [3, 2, 2]);
        return [root];
      }
    
      function addNodes(root, levels) {
        if (levels.length > 0) {
          for (var i = 0; i < levels[0]; i++) {
            var node = { name: "0", items: [] };
            root.items.push(node);
    
            addNodes(node, levels.slice(1));
          }
        }
      }
    
      $(document).ready(function() {
        $("#subtype").change(function() {
          $("#diagram").getKendoDiagram().layout({
            subtype: $(this).val(),
            type: "tree",
            horizontalSeparation: 30,
            verticalSeparation: 20
          });
        });
      });
    
      $(document).ready(createDiagram);
      $(document).bind("kendo:skinChange", createDiagram);
    

    There is another type of rendering connections with:

      connectionDefaults: {
        type: "polyline"
      }
    

    You can check it out here: http://dojo.telerik.com/uNOVa/3

    You can also fix your connections with an array: connections An example is here: example