Очистить рабочее пространство Blockly без перемещения элементов в корзину - PullRequest
0 голосов
/ 12 января 2020

Я хотел бы использовать код для очистки рабочего пространства Blockly, а в некоторых случаях перезаписать новым Blockly XML. Однако проблема, с которой я сталкиваюсь, заключается в том, что Workspace.clear() перемещает текущие элементы в tra sh, что может раздражать при попытке перезагрузить рабочее пространство или перезаписать его блоками (что означает очистку его первым, в противном случае текущие блоки будет перезаписано). Я обнаружил, что могу очистить мусорную корзину с помощью workspace.trashcan.contents = [], но это приводит к некоторому неожиданному поведению относительно рендеринга крышки, которая выглядит слегка приоткрытой, несмотря на то, что она пуста.

Даже если бы я мог найти способ очистить мусорную корзину, это все равно приведет к очистке всех предыдущих элементов, в то время как все, что я ищу, - это выполнить одиночное действие очистки без воздействия на мусорную корзину. Я пытался просмотреть документы на Workspace.Clear, но они, похоже, не дают никакого семанти c способа сделать это. Я также попытался перебрать Workspace.getTopBlocks() с Events.Delete, но это также привело к перемещению предметов в мусорную корзину.

Я также пытался реализовать ручное решение, что-то вроде:

const contentsBeforeClearing = workspace.trashcan.contents_;
workspace.clear();
workspace.trashcan.contents_ = contentsBeforeClearing;

Для первой строки я также пробовал Object.assign([], workspace.trashcan.contents_) и workspace.trashcan.contents_.slice(), но во всех трех случаях (включая верхний), конечный результат эквивалентен простому вызову workspace.clear. Я предполагаю, что это как-то связано с getter-setters, манипулирующими contentsBeforeClearing (поскольку значение переменной изменилось , если вы протестируете ее в консоли после очистки, чтобы удалить удаленный блок (блоки)), но как обойти это за мной.

Как я могу очистить рабочее пространство без манипулирования (а не просто сбросом) содержимого корзины?

...