Hello,
I am trying to build a diagram having multiple inport, outport. The idea in abstract… after declaring gojs diagram, an empty model have been declared. Later I am adding node & link to the model from my local JS array. I think my makePort & makeTemplate function is working fine.
var $$ = go.GraphObject.make;
Diagram =
$$(go.Diagram, "graph",
{
....
}
);
self.nodeDataArray = [];
self.linkDataArray = [];
var graph_model_data = ({class: 'go.GraphLinksModel', nodeCategoryProperty: 'type', linkFromPortIdProperty: 'frompid', linkToPortIdProperty: 'topid', nodeDataArray: self.nodeDataArray, linkDataArray: self.linkDataArray});
Diagram.model = go.Model.fromJson(JSON.stringify(graph_model_data));
function makePort(name, leftside) {
....
}
function makeTemplate(typename, background, inports, outports) {
....
}
rels['nodeDataArray'].forEach(function(node) {
type = node.type;
name = node.name;
switch(type) {
case "Operator":
color = 'CadetBlue';
break;
case "Data":
color = 'SteelBlue';
break;
case "Service":
color = 'Teal';
break;
case "Operator":
color = 'CadetBlue';
break;
default:
color = 'SteelBlue';
}
var listOfInputPorts = [];
var listOfOutputPorts = [];
rels['linkDataArray'].forEach(function(link) {
//input port definition
if(node.key == link.to){
var aNewInputPort = makePort(link.topid, true);
listOfInputPorts.push(aNewInputPort);
}
//output port definition
if(node.key == link.from){
var aNewOutputPort = makePort(link.frompid, false);
listOfOutputPorts.push(aNewOutputPort);
}
Diagram.startTransaction("add link");
Diagram.model.addLinkData(link);
Diagram.commitTransaction("add link");
});
makeTemplate(type, color,
listOfInputPorts,
listOfOutputPorts);
Diagram.startTransaction("add node");
Diagram.model.addNodeData(node);
Diagram.commitTransaction("add node");
});
While I debugged, It seems nodes & ports are creating using same data from JS array. But, there is only one port in each node having same port_id while drawing the graph, even if the node suppose to have multiple port.
Am i messing with the model data?
Thanks in advance.