Идентификатор клона остается таким же, как у клонированного элемента

paper.on('cell:pointerdown',
    function(cellView, evt, x, y) {
       for(var i=0; i<menu.length;i++){
           if(menu[i].id===cellView.model.id){
               graph.addCell(menu[i].clone());
           }
       }
    }
);

В этом коде я клонирую элемент из меню массива элементов. Я ожидал, что клон будет иметь уникальный id, потому что функция клонирования должна была дать новый id, но он имеет тот же id, что и клонированный элемент. Может кто-нибудь объяснить мне, почему это происходит и как правильно клонировать элементы?


person Pfeiffer    schedule 24.09.2015    source источник
comment
Почему вы ожидаете этого? Там нет кода, который делает это.   -  person isherwood    schedule 24.09.2015
comment
код .clone() из JointJS делает это.   -  person Pfeiffer    schedule 24.09.2015
comment
clone link.clone() Возвращает новый экземпляр ссылки с идентичными атрибутами. ID — это атрибут. jointjs.com/api#joint.dia.Link:clone   -  person isherwood    schedule 24.09.2015
comment
И новый идентификатор. Часть исходного кода JointJS:   -  person Pfeiffer    schedule 24.09.2015
comment
/* Мы не хотим, чтобы клон имел тот же идентификатор, что и оригинал.*/ * clone.set('id',joint.util.uuid(), {silent: true }); clone.set('встраивает', ''); *изменил комментарий, чтобы показать начало и конец.   -  person Pfeiffer    schedule 24.09.2015
comment
Этот код использует уникальную строку в качестве идентификатора. Твой нет.   -  person isherwood    schedule 24.09.2015
comment
JointJS действительно создает новый идентификатор внутри метода clone(). Никогда не должно быть так, чтобы идентификатор клона совпадал с идентификатором оригинала. Где вы проверяете, совпадают ли идентификаторы? Можете ли вы изменить свой код на: console.log(menu[i].id); var clone = menu[i].clone(); console.log(clone.id); graph.addCell(clone) и опубликовать ответ здесь?   -  person dave    schedule 25.09.2015
comment
Дэйв, через какое-то время он начал нормально работать. Так что я полагаю, что это либо ошибка IDE, либо ошибка браузера. Вероятно, вариант с браузером, так как в то время у меня было более 2 ГБ утечки памяти в ОЗУ. Я уже видел, как вы раньше отвечали на вопросы о JointJS и SVG. Ваши ответы очень хороши. Если это возможно, не могли бы вы взглянуть на этот другой вопрос? stackoverflow.com/q/32794891/4438220   -  person Pfeiffer    schedule 26.09.2015


Ответы (1)


он клонирует его как надо, вам нужно дать клонированному элементу другой идентификатор. что-то вроде

graph.addCell(menu[i].clone().attr('id', newNumber));
person indubitablee    schedule 24.09.2015
comment
Это не отвечает на вопрос. Метод клонирования изjointjs должен давать новый идентификатор без необходимости установки нового идентификатора. - person Pfeiffer; 24.09.2015