2015-10-18 2 views
1

При нажатии на пробеле бумаги будет добавлена ​​новая ячейка:Изменения: событие положения для каждой ячейки в бумаге с помощью joint.js

paper.on({ 
    'blank:pointerdblclick': function(event, x, y) { 
     var rect = new joint.shapes.app.Standard({ 
      position: { x: x, y: y }, 
      size: { width: 100, height: 80 }, 
     }); 

     graph.addCell(rect); 

     rect.on('change:position', function() { 
      paper.fitToContent(); 
     }); 
    } 
}); 

Но как change:position события устанавливаются в blank:pointerdblclick событие, оно просто срабатывает для новых элементов. Но он должен быть установлен для всех ячеек, существующих для этой статьи. Итак, для перемещения любой ячейки на бумаге функция fitToContent() должна быть выполнена ...

Как это сделать?

P.S .: Стандарт-элемент определяется следующим образом:

joint.shapes.app.Standard = joint.shapes.basic.Generic.extend({ 
    markup: '<rect/><circle class="port-top"/><circle class="port-bottom"/><circle class="port-right"/><circle class="port-left"/><text/>', 
    defaults: joint.util.deepSupplement({ 
     type: 'app.Standard', 
     attrs: { 
      ... 
     } 
    }, joint.shapes.basic.Generic.prototype.defaults) 
}); 

ответ

2

Используйте graph.getElements() и итерации по их установки обработчику

graph.getElements().forEach(function(element) { 
    element.on('change:position', function() { 
     paper.fitToContent(); 
    });