вставка элементов несколько раз в rappid js - PullRequest
1 голос
/ 25 февраля 2020

Я использую соединение js и rappid с angular 8, и я выполнил большинство задач, но при использовании событий клавиатуры, похоже, возникает проблема. Когда я копирую элемент и вставляю его в график, он работает нормально. Но для следующего выбранного элемента это вставка этого нового элемента несколько раз.

Вот мой код.

var keyboard = this.keyboard = new joint.ui.Keyboard();
var clipboard = this.clipboard = new joint.ui.Clipboard();

selection.collection.on('reset add remove', this.onSelectionChange.bind(this));

paper.on('element:pointerdown', function(elementView: joint.dia.ElementView,evt: joint.dia.Event) {

            clipboard.clear();
            keyboard.on({
            'ctrl+c': function(evt) {

                selection.collection.reset();
                //clipboard.clear();
                selection.collection.add(elementView.model);
                clipboard.copyElements(selection.collection, paper.model);
                //console.log(clipboard);

            },
            'ctrl+v': function(evt) {
                //console.log(clipboard);
                var pastedCells = clipboard.pasteCells(graph, {
                    translate: { dx: 20, dy: 20 },
                    useLocalStorage: true
                });

                var elements = _.filter(pastedCells, function(cell) {
                    return cell.isElement();
                });

                //console.log(elements);
                // Make sure pasted elements get selected immediately. This makes the UX better as
                // the user can immediately manipulate the pasted elements.
                selection.collection.reset(elements);

            },

        });


    });

onSelectionChange() {
        const { paper, selection,clipboard } = this;
        const { collection } = selection;
        //console.log(collection.models.child);
       // collection.models.forEach(function(model: joint.dia.Element) { if(!model.collection) { clipboard.clear();}});
        paper.removeTools();
        joint.ui.Halo.clear(paper);
        joint.ui.FreeTransform.clear(paper);
        joint.ui.Inspector.close();
        if(collection.first() == undefined){
            clipboard.clear();
        }
        if (collection.length === 1) {
            var primaryCell = collection.first();
            var primaryCellView = paper.requireView(primaryCell);
            selection.destroySelectionBox(primaryCell);
            this.selectPrimaryCell(primaryCellView);
        } else if (collection.length === 2) {
            collection.each(function(cell) {
                selection.createSelectionBox(cell);
            });
        }

    }
    selectPrimaryCell(cellView) {
        var cell = cellView.model
        if (cell.isElement()) {
            this.selectPrimaryElement(cellView);
        } else {
            this.selectPrimaryLink(cellView);
        }
        //this.createInspector(cell);
    }
    selectPrimaryElement(elementView) {

        var element = elementView.model;
        console.log(element.collection);
        new joint.ui.FreeTransform({
            cellView: elementView,
            allowRotation: false,
            preserveAspectRatio: !!element.get('preserveAspectRatio'),
            allowOrthogonalResize: element.get('allowOrthogonalResize') !== false
        }).render();
    }

У меня есть другая вещь, как сброс буфера обмена, сброс выделения и сброс клавиатура, но ничего не работает.

...