2016-01-25 3 views
0

Я хочу, чтобы пользователи могли нажимать на какой-либо текст внутри узла и выполнять некоторые действия, например, показывать диалог или открывать другое окно. Это возможно?Можно ли создавать гиперссылки внутри узлов в Cytoscape.js?

В документации есть что-то вроде:

текстовых события: должны ли события происходят на элемент, если метка получает событие; может быть да или нет. Вам может понадобиться стиль, применяемый к тексту: активен, чтобы вы знали, что текст активируется.

кажется, что вещь, но нет ни одного примера, как использовать его на уровне этикетки ..

EDIT: пример on the diagram

, как я предполагаю, что это может быть в коде:

label_element.on('tap', function(event){ 
    // cyTarget holds a reference to the label 
    var evtTarget = event.cyTarget; 
    //... 
    }); 

или

cy.on('tap', function(event){ 
    var evtTarget = event.cyTarget; 
    //evtTarget holds element but I can somehow get the text which got tap event?? 
    }); 
+0

Пожалуйста, разместите код, чтобы проиллюстрировать его. – alvaropaco

+1

привет @ alvaro.scalasoft, спасибо за ответ, пожалуйста, посмотрите изменения выше –

+0

Хорошо! Этот код работает для вас? – alvaropaco

ответ

0

Согласно Cytoscape.js документации, вы можете попробовать сделать это с помощью

cy.on ('водопроводной')

, как это: Примеров

Bind к событиям, которые пузырь от элементов, соответствующих указанному селектору узлов:

cy.on('tap', 'node', { foo: 'bar' }, function(evt){ 
     console.log(evt.data.foo); // 'bar' 

     var node = evt.cyTarget; 
     console.log('tapped ' + node.id()); 
    }); 

Привязать все события кранов, которые ядро получает:

cy.on('tap', function(event){ 
     // cyTarget holds a reference to the originator 
     // of the event (core or element) 
     var evtTarget = event.cyTarget; 

     if(evtTarget === cy){ 
      console.log('tap on background'); 
     } else { 
     console.log('tap on some element'); 
     } 
    }); 

В http://js.cytoscape.org/#cy.on

0

Если text-events: yes, нажав метку узла-вызовет tap на узле.

Если вы хотите иметь произвольные пользовательские интерфейсы поверх узлов, с которыми можно независимо взаимодействовать, тогда вы должны создать отдельный слой в DOM.

Обоснование. Этикетки относительно просты в Cytoscape.js, так как поддерживающие сложные объекты будут иметь тот же порядок сложности, что и DOM. В этом случае лучше использовать DOM как слой поверх графика, а не переопределять его в Cytoscape.js.

+0

спасибо @maxkfranz, мне кажется разумным. Как вы создаете такой слой DOM поверх холста? Можете привести пример? Также, как заставить его взаимодействовать с изменениями на основном холсте, например. при масштабировании диаграммы я ожидал бы, что метки на основе DOM будут также масштабироваться. –

+0

Вам нужно будет создать div, выровненный сверху, и изменения состояния синхронизации с графиком. – maxkfranz

+1

@maxkfranz Мой коллега и я ищем прямой ответ на этот вопрос. Не могли бы вы создать небольшой пример для нас? Пожалуйста, спасибо –