Я хотел бы использовать код для очистки рабочего пространства 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
(поскольку значение переменной изменилось , если вы протестируете ее в консоли после очистки, чтобы удалить удаленный блок (блоки)), но как обойти это за мной.
Как я могу очистить рабочее пространство без манипулирования (а не просто сбросом) содержимого корзины?