2015-07-29 3 views
1

У меня есть модель-модель backbonejs, содержащая модели для узлов JSPlumb (ID, parentID). Представление DOM обрабатывается React (divs with Endpoints). Если я удалю модель из коллекции:Как удалить JSPlumb-элемент в среде React/Backbone?

nodeCollection.remove(aNodeModel) 

он удаляется из DOM со всеми компонентами - приятно.

Если теперь добавить новый узел, конечная точка не будет добавлена. Я отслеживал этот вопрос вплоть до некоторых внутренних органов в JSPlumb: Если я делаю

jsPlumb.remove(aNodeModel.id) 

конечная точка-проблема исчезает, но я получаю React «Инвариантные Нарушение», потому что aNodeModel не был удален из nodeCollection.

Если удалить jsPlumb Endpoint вручную, прежде чем удалить модель из коллекции:

jsPlumb.removeAllEndpoints(aNodeModel.id) 

проблема остается.

Это как-то похоже на тупик ... Любые предложения?

+0

'nodeCollection.remove' удаляет его из DOM, используя реакцию справа? Но удаляется ли из jsPlumb? Я предполагаю, что React не будет сообщать jsPlumb об обновлении его модели, поскольку он удалил узел в DOM. –

+0

Да, это как раз проблема. Я нашел решение для этого, добавив параметр в метод 'jsPlumb.remove()'. С помощью этого параметра я могу управлять, если элемент фактически удален из DOM. Если я установлю его на 'false', я могу удалить элемент из jsPlumb и удалить его из коллекции модели, управляемой React после этого :-) Я разместил изменения в качестве ответа на этот вопрос. – Benvorth

ответ

1

Открытый источник roxx.

Я решил эту проблему, добавив параметр в метод jsPlumb .remove(), управляющий фактическим DOM-удалением элемента внутри jsPlumb. Если установить это ложное jsPlumb очищаетс красиво я могу позволить Реагировать удалить фактический DOM-элемент после этого:

jsPlumb.remove(sourceNodeID, false, [false]) 

Это те изменения, которые я сделал на источник jsPlumb в dom.jsPlumb-1.7.5 .js, строки 5176 и 5210.