在jointJS中按元素的名称搜索图表

时间:2016-09-21 14:47:38

标签: search graph jointjs rappid

我在Rappid / jointJS中遇到问题

我有stencil.js 4个形状(2个basic.Circle和2个basic.Rect),名称为START(basic.Circle),END(basic.Circle),Activity(basic.Rect)和Workitem(basic.Rect) )和我想在我的所有图表的main.js 中获取名称的基本形状(我的意思是attrs文字)"活动"。

这是"活动"的模板描述。 :

changed(Item item, ItemState state)

我怎么得到它?到目前为止,我可以在我的图表中搜索的唯一方法是单元格是否具有类型basic.Circle(使用new joint.shapes.basic.Rect({ size: { width: 5, height: 3 }, attrs: { rect: { rx: 2, ry: 2, width: 50, height: 30, fill: '#0000FF' }, text: { text: 'Activity', fill: '#ffffff', 'font-size': 10, stroke: '#000000', 'stroke-width': 0 } } }), )。但是对于Circle类型我有两个项目:Activity和Workitem。

使用名称搜索图元素是否如此困难:"活动"?

提前谢谢

4 个答案:

答案 0 :(得分:2)

您可以从以下方法获取所有元素(链接除外)

var allElement = graph.getElements()

接下来,如果您想获取具有'活动'的元素,请执行以下操作

var activityElements = [];

allElement.forEach(elem => {
    var textVal = elem.attributes.attrs.text.text;
    if(textVal !== undefined && textVal === 'Activity') {
        activityElements.push(elem);
    }
});

现在,activityElements数组将包含您需要的所有元素。

答案 1 :(得分:1)

我通过采用JSON格式的元素数据解决了我的问题:

 _.each(this.graph.getElements(), function(element) {


             if(element.attributes.attrs["text"]["text"] == "Activity"){
             //alert("YEAHHHHHH");
             }

            });

答案 2 :(得分:1)

你也可以使用api on元素,element.attr('text')从形状中返回text个对象:{ text: 'Activity', fill: '#ffffff', 'font-size': 10, stroke: '#000000', 'stroke-width': 0 }

答案 3 :(得分:0)

您还可以为形状设置一个“ id”属性,并使用graph.getCell('id_name_goes_here');,如果您不介意向每个形状添加id字段,这会更加简单。