使用mxEditor定制绘图项目时,经常会有这样的需求:某种类型的图元只能有输入连接,不能有输出连接,而某些图元则正相反,比如状态图中的开始和结束;某些图元只能和特定的图元相连;某些连接之间的数量是需要限定的,等等。这些约束性的需求可以使用mxGraph的验证关系实现,示例代码如下:
editor.graph.multiplicities.push(new mxMultiplicity(
false,
'MyStart',
null,
null,
0,
0,
null,
'开始不能连接输入',
null));
mxMultiplicity的语法如下:
function mxMultiplicity( source,
type,
attr,
value,
min,
max,
validNeighbors,
countError,
typeError,
validNeighborsAllowed )
参数的说明如下:
- source:布尔类型,说明约束针对的是源节点还是目标节点,比如在上面的例子中,设置为false,说明在MyStart作为目标节点时,输入的值只能为0。
- type:针对的类型,比如上面针对的是'MyStart'类型。
- attr:针对类型中的属性名称
- value:针对类型中的属性值
- min:最小的输入,缺省为1
- max:最大的输入,缺省为n
- validNeighbors:合法的邻居节点
- countError:发生数量错误时的报错信息
- typeError:发生类型错误时的报错信息
- validNeighborsAllowed: 布尔类型,可选,说明validNeighbors中所列的节点类型是符合条件的还是不符合条件的。
下面是一些示例:
开始节点不能有输入:
editor.graph.multiplicities.push(new mxMultiplicity(
false, 'MyStart', null, null, 0, 0, null,
'开始不能连接输入',
null));
结束节点不能有输出:
editor.graph.multiplicities.push(new mxMultiplicity(
true, 'MyEnd', null, null, 0, 0, null,
'结束不能连接输出',
null));
子流程只能从分支连接,并且只能向后连接合并:
editor.graph.multiplicities.push(new mxMultiplicity(
true, 'MySubprocess', null, null, 1, 1, ['MyMerge'],
'子流程只能连接合并',
'子流程只能连接合并'));
editor.graph.multiplicities.push(new mxMultiplicity(
false, 'MySubprocess', null, null, 1, 1, ['MyFork'],
'子流程只能有一个输入',
'子流程只能从分支输入'));