Вот мой пользовательский блок отображения:
/* Converts element attributes to their appropriate mapped values
* Any non-matching attributes will be matched to the "other" mapping
* if exists
* data: data
* elementType: nodes or edges
* attr: some key under data.nodes[i].data
* mapping: obj mapping oldVal: newVal for attr
* (toType): new values will be put into this attr, if attr
* shouldn't be touched
*/
function mapAttr(elementType, attr, mapping, toType){
for(var i=0; i < data[elementType].length; i++){
element = data[elementType][i]['data'][attr];
toType = toType ? toType : attr;
if(mapping[element]){
data[elementType][i]['data'][toType] = mapping[element];
}else if(mapping['other']){
data[elementType][i]['data'][toType] = mapping['other'];
}
}
}
Пример:
var nodeShapeMapper = {
Rearrangement: "hexagon",
Gene: "octagon",
Molecule: "triangle",
other: "ellipse"
};
mapAttr('nodes', 'ntype', nodeShapeMapper, 'shape');
Это генерирует значения для атрибута узла "форма" в соответствии с nodeShapeMapper [ntype]
Hi @maxkfranz, я 'm ищет простой способ сопоставления значений по строкам 'var mapping = {a:" hexagon ", b:" triangle ", c:" ellipse "}' для ребер, содержащих 'type =' ' Возможно ли это на дискретную карту таким образом, или я должен обрабатывать каждый из этих случаев индивидуально? Благодаря! –
@JD. Вам не нужно использовать карты для дискретных сопоставлений. Синтаксис 'data()' на самом деле просто перенос из Cytoscape Web, но вам лучше использовать стили, подобные CSS (т. Е. В таблице стилей, указанной в init). Вы можете добавлять классы к элементам, чтобы их легко стилизовать, или вы могли бы использовать более сложные селектора на основе данных. См. Http://cytoscape.github.io/cytoscape.js/#core/initialisation и http://cytoscape.github.io/cytoscape.js/#selectors – maxkfranz