2013-08-19 4 views

ответ

0

Вот мой пользовательский блок отображения:

/* 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]

0

Пользовательские карты слишком дороги в целом, поэтому они не поддерживаются в Cytoscape.js. Хорошая производительность является одним из наших лучших требований к библиотеке.

Если бы вы описали подходящее сопоставление, то это может быть возможно с помощью API сегодня, или мы могли бы работать над тем, что соответствует вашим потребностям. Благодаря!

+0

Hi @maxkfranz, я 'm ищет простой способ сопоставления значений по строкам 'var mapping = {a:" hexagon ", b:" triangle ", c:" ellipse "}' для ребер, содержащих 'type =' ' Возможно ли это на дискретную карту таким образом, или я должен обрабатывать каждый из этих случаев индивидуально? Благодаря! –

+0

@JD. Вам не нужно использовать карты для дискретных сопоставлений. Синтаксис 'data()' на самом деле просто перенос из Cytoscape Web, но вам лучше использовать стили, подобные CSS (т. Е. В таблице стилей, указанной в init). Вы можете добавлять классы к элементам, чтобы их легко стилизовать, или вы могли бы использовать более сложные селектора на основе данных. См. Http://cytoscape.github.io/cytoscape.js/#core/initialisation и http://cytoscape.github.io/cytoscape.js/#selectors – maxkfranz

Смежные вопросы