почему fabri cjs kclass из объекта, возвращающего неопределенное в новой версии? - PullRequest
0 голосов
/ 04 февраля 2020

вчера я изменил версию fabri cjs в нашем приложении. неожиданно kclass.fromObject возвращает неопределенное значение.

моя предыдущая версия 1.7.22 и в настоящее время используется 3.6.1 https://cdnjs.cloudflare.com/ajax/libs/fabric.js/3.6.1/fabric.min.js

kclass.fromobject, возвращающий неопределенное значение. но у объектов [i] есть данные.

> var klass = fabric.util.getKlass(objects[i].type); 
> console.log(klass.fromObject(objects[i]));  //returning undefined on 3.6.1 
> fabricObj.add(klass.fromObject(objects[i]));

Не могли бы вы сообщить мне, как решить эту проблему?

Вот снимок экрана

enter image description here

enter image description here

enter image description here

1 Ответ

0 голосов
/ 07 февраля 2020

Ваш массив objects содержит только простые javascript объекты, представляющие сериализованные объекты Fabri c (например, путь, круги и т. Д.).

Перед рендерингом этих простых javascript объектов, которые необходимо преобразовать их в Фабри c объектах. Этот процесс называется десериализацией. Ваш код делает это, но только если свойство async переменной klass имеет значение true. Это происходит здесь:

var klass = fabric.util.getKlass(objects[i].type);
if (klass.async) {
    klass.fromObject(objects[i], function (img) {
        canvas1.add(img);
    });
}

Объект десериализован, передан в качестве аргумента функции обратного вызова, а затем добавлен на холст, и это здорово.

Проблема в другом ветка ваша условная, где ничего этого не происходит. Единственный существующий код - это:

else {
    console.log(objects[i]);
    canvas1.add((objects[i]));
}

Здесь вы пытаетесь добавить простой объект на холст, и это вызывает ошибку. Одно простое решение - удалить if / else и всегда выполнять этап десериализации. Если по другим причинам вам необходимо поддерживать условное выражение if / else, вы можете просто десериализовать объект и в другом пути.

Вот работающий Fiddle , который сохраняет условное выражение.

Почему он работал в предыдущей версии Fabri c? Трудно сказать. Может быть, этот тип объекта был помечен как asyn c, так что запуск правильного пути. Или, может быть, метод canvas.add автоматически десериализует javascript объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...