e [i] .render не является функциональной структурой js - PullRequest
1 голос
/ 19 сентября 2019

Я использую функции отмены и возврата, когда я отменяю / возвращаю изменение позиции объекта (z-index), я не нашел способа сохранить z-index в JSON (toJSON).Поэтому я пытаюсь установить z-index для функции отмены / восстановления.

...
var jsonData = JSON.parse(config.canvasState[config.currentStateIndex+1]);
if(jsonData.objects.length){
       jsonData.objects.forEach(function(e){
              if(e && e.selectable === false){
                     canvas.sendToBack(e);
              }
       })
}
canvas.renderAll();
...

Я получаю ошибку e[i].render is not a function.

Решение

var jsonData = JSON.parse(config.canvasState[config.currentStateIndex+1]);
var imgObjs = _canvas.getObjects();
if(imgObjs.length){
       imgObjs.forEach(function(e){
              if(e && e.selectable === false){
                     _canvas.sendToBack(e);
              }
       });
}

1 Ответ

0 голосов
/ 19 сентября 2019

Запуск JSON.parse(config.canvasState[config.currentStateIndex+1]); создает копий всех экземпляров элементов на холсте.Когда вы запускаете .forEach на этих копиях и пытаетесь отобразить их, используя ткань, вы работаете с элементами, которых не существует в канве и, следовательно, вы не можете вызвать sendToBack для них.

Я бы порекомендовал посмотреть, есть ли альтернативный способ получения списка элементов на холсте.Что-то вроде canvas._objects.forEach(...), вероятно, будет работать.

...