В нашем приложении у нас есть линейный инструмент.Мы опускаем линию с двумя подвижными конечными точками на нашу бумагу.
Все фигуры в нашем приложении имеют связанную VisualModel, которая содержит все геометрические данные внутри них.Эти VisualModels также удваиваются как актеры.Любой актер может подписаться на любого другого актера, и когда происходят изменения, все заинтересованные стороны отвечают.
Такая система позволяет изменять путь линии через функцию перерисовки, которая вызывается каждый раз, когда 2 подключенных объекта изменяют свои X /Координаты Y.
connect_line.js (перерисовка)
redraw: function() {
var x1 = this.shapeView1.visualModel.get('x'),
y1 = this.shapeView1.visualModel.get('y'),
x2 = this.shapeView2.visualModel.get('x'),
y2 = this.shapeView2.visualModel.get('y'),
pathData;
pathData = 'M' + x1 + ',' + y1 + 'L' + x2 + ',' + y2;
this.line.attr({
path: pathData,
fill: '#000000',
stroke: LineConstants.COLOR,
'stroke-width': LineConstants.THICKNESS
});
}
Мы создали «подвижный» миксин.Этот миксин позволит вам добавить подвижность вашим фигурам.Этот миксин обновит координаты x / y и, в свою очередь, вызовет событие 'change', которое подхватит ваш класс линии.
movable.js
handleDraggging: function(delta) {
this.shape.move(delta);
}
move: function(delta) {
//... compute movement based on delta
this.visualModel.set('x', xPosition);
this.visualModel.set('y', yPosition);
}
connect_line.js
initialize: function(shapeView1, shapeView2) {
// ...
this.shapeView1 = shapeView1;
this.shapeView2 = shapeView2;
this.listenTo(shapeView1.visualModel, 'change:x change:y', this.redraw);
this.listenTo(shapeView2.visualModel, 'change:x change:y', this.redraw);
}
Производительность при этом отличная.Вы можете посмотреть на него в действии, зайдя на eventbrite.com, создать событие, включив зарезервированные места (шаг 2), добавить новую карту, щелкнуть «объекты» слева и оставить линию на бумаге.