2014-09-05 2 views
0

В моем веб-приложении используется mxClient.js. Мои объекты SVG создаются с помощью их API, который поставляется в следующем виде:Как получить идентификатор на элементах SVG, используя mxGraph

mxGraph.prototype.insertVertex = function(parent, 
              id, 
              value, 
              x, 
              y, 
              width, 
              height, 
              style, 
              relative); 

Однако, когда я инициализировать свои объекты со строкой в ​​параметре ID, он не появляется, когда я инспектировать элемент на Chrome. Есть ли очевидное обходное решение для этой проблемы?

До сих пор я пытался вызвать svg, используя jQuery и Javascript, но безрезультатно.

Мой базовый код:

function main(container) 
     { 
      if (!mxClient.isBrowserSupported()) 
      { 
       mxUtils.error('Browser is not supported!', 200, false); 
      } 
      else 
      { 
       mxEvent.disableContextMenu(container); 

      var graph = new mxGraph(container); 

      new mxRubberband(graph); 

      var parent = graph.getDefaultParent(); 

      graph.getModel().beginUpdate(); 
      try 
      { 

       var v1 = graph.insertVertex(parent, "_IWID_1021", 'asdf', 31, 240, 100, 30), 
        v2 = graph.insertVertex(parent, "_IWID_2349", 'Oasdf', 160, 320, 100, 30), 
        v3 = graph.insertVertex(parent, "_IWID_3452", 'asdf', 160, 160, 100, 30), 
        v4 = graph.insertVertex(parent, "_IWID_4561", 'asdfasdf', 320, 320, 100, 30), 
        v5 = graph.insertVertex(parent, "_IWID_5670", 'asdff', 320, 160, 100, 30), 
        v6 = graph.insertVertex(parent, "_IWID_6780", 'qwerqwer', 448, 240, 100, 30), 
        v7 = graph.insertVertex(parent, "_IWID_3456", 'zxcvxzcv', 597, 240, 100, 30), 
        v8 = graph.insertVertex(parent, "_IWID_3498", 'asdfasdf', 714.6, 240, 100, 30), 
        v9 = graph.insertVertex(parent, "_IWID_1643", 'asdfasdf', 822, 240, 100, 30), 
        v10 = graph.insertVertex(parent, "_IWID_5731", 'asdfasdf', 993, 240, 100, 30), 
        v11 = graph.insertVertex(parent, "_IWID_0942", 'asdfasdf', 1113, 240, 100, 30), 
        v12 = graph.insertVertex(parent, "_IWID_2875", 'asdfasdf', 1221, 240, 100, 30), 
        v13 = graph.insertVertex(parent, "_IWID_9397", 'asdfasdfasd', 1333, 240, 100, 30), 
        v14 = graph.insertVertex(parent, "_IWID_111", 'asdfasdf', 1486, 240, 100, 30); 

       var c1 = graph.insertEdge(parent, null, '', v1, v2), 
        c2 = graph.insertEdge(parent, null, '', v1, v3), 
        c3 = graph.insertEdge(parent, null, '', v2, v4), 
        c4 = graph.insertEdge(parent, null, '', v3, v5), 
        c5 = graph.insertEdge(parent, null, '', v4, v6), 
        c6 = graph.insertEdge(parent, null, '', v5, v6), 
        c7 = graph.insertEdge(parent, null, '', v6, v7), 
        c8 = graph.insertEdge(parent, null, '', v7, v8), 
        c9 = graph.insertEdge(parent, null, '', v8, v9), 
        c10 = graph.insertEdge(parent, null, '', v9, v10), 
        c11 = graph.insertEdge(parent, null, '', v10, v11), 
        c12 = graph.insertEdge(parent, null, '', v11, v12), 
        c13 = graph.insertEdge(parent, null, '', v12, v13), 
        c14 = graph.insertEdge(parent, null, '', v13, v14); 
      } 
      finally 
      { 
       graph.getModel().endUpdate(); 
      } 
     } 
    }; 
+0

Где находится функция _body_? – undefined

+2

ID используется для mxGraphModel.getCell. Вы можете получить узел SVG для элемента, используя graph.view.getState (cell) .shape.node (.text.node для метки) после вызова endUpdate. – user1084282

+0

Спасибо, я попробую в ближайшее время и обновить вопрос, если он работает. – Xenyal

ответ

0

Какую видящий правильно.

Я ударил головой о кирпичную стену, пытаясь работать с этим в течение пары недель.

НИКАКИЕ из сгенерированных SVG не содержат каких-либо разумных атрибутов ID на основе HTML, что означает, что для выполнения jQuery или каких-либо других операций нет сгенерированных идентификаторов.

То, что мы закончили делать, состояло в том, чтобы сохранить массив вершин, которые мы создали, после чего мы могли бы вернуться к ним позже.

В нашем случае мы хотели изменить изображения в наших объектах ячейки, поэтому мы сохранили ссылку в массиве и сопоставили это, когда мы получили событие click в MxGraph, а затем изменили изображения с помощью своего API.

Я не знаю, если это любая помощь, однако, НО ...

Как я только что указал в другой аналогичный вопрос, в обработчике события MxGraph, если вы сделаете следующее

var mouseEvent = event.getProperty('event'); 
var selectedCell = event.getProperty('cell'); 

Где событие передается в обработчик события в качестве параметра.

Вы можете получить в HTML элемента нажат с помощью

selectedCell.currentTarget.innerHTML 

когда у вас есть внутренний HTML, вы могли бы теоретически использовать обычный JS/HTML код для добавления атрибутов идентификаторов или что-нибудь еще тебе нужно.

Если, однако, все ваши данные являются идентификаторами, тогда идентификатор, который вы предоставили при создании ячейки с помощью «insertVertex», доступен в объекте selectedCell как строка.