2013-10-27 5 views
2

Я работаю с fabricJS. Это потрясающая библиотека для рисования.Стройте только один объект в Fabric.js

var data = JSON.stringify(canvas); 

Выше команды используется, чтобы получить все объекты вместе с их свойствами в формате JSON. Тем не менее, я хочу, чтобы stringfy только объект.

Для примера. Создание прямоугольника с помощью ткани

var rec = new fabric.Rect({ 
    left: mouse_pos.x, 
    top: mouse_pos.y, 
    width: 75, 
    height: 50, 
    fill: 'white', 
    stroke: 'black', 
    strokeWidth: 3, 
    padding: 10 
    }); 
canvas.add(rec); 

Я хочу, чтобы получить JSON только этот объект (прямоугольник) добавляются к холсту, а не JSON в целом холста быть оказано. Может быть что-то вроде var data = JSON.stringfy(rec);. Есть ли способ сделать это, потому что я хочу отправить последний объект, добавленный в холст поверх сокетов, а не весь объект холста, который, в свою очередь, потребляет ненужную полосу пропускания из-за размера объекта JSON.

ответ

3

Да, вы можете! :)

var rect = new fabric.Rect({ 
    left: mouse_pos.x, 
    top: mouse_pos.y, 
    width: 75, 
    height: 50, 
    fill: 'white', 
    stroke: 'black', 
    strokeWidth: 3, 
    padding: 10 
    }); 

canvas.add(rect); 

// get last item 
var obj = canvas.item(canvas.size() - 1); 

// stringify only one object 
var json = JSON.stringify(obj); 
+1

Совершенство! Большое спасибо @Keinz. Только одно, что я хотел бы поделиться: чтобы загрузить этот объект в будущем 'canvas.loadFromJSON (obj)', нужно сделать 'obj = '{" objects ": [' + obj + ']}';' после получения 'obj' в противном случае ткань будет сообщать' Length Exception'. – softvar

+1

Возможно, этот пост поможет вам: http://stackoverflow.com/a/19364574/2323945 'canvas.loadFromJSON' нуждается в объекте. – Kienz

+0

Спасибо @Kienz за вашу помощь! – softvar

1

Не можете ли вы просто превратить свой объект в JSON? Затем вы можете отправить его через сокеты, получить JSON на вашем приемнике, проанализировать его и применить в функцию fabric.Rect, чтобы нарисовать свой прямоугольник.

var options = { 
    left: mouse_pos.x, 
    top: mouse_pos.y, 
    width: 75, 
    height: 50, 
    fill: 'white', 
    stroke: 'black', 
    strokeWidth: 3, 
    padding: 10 
}; 

var rec = new fabric.Rect(options); 
canvas.add(rec); 

var yourData = JSON.stringify(options); // turns your options object into JSON 

// ...rest of your code, that sends it through sockets... 
+0

Что в случае 'isDrawingMode = true'? Путь автоматически отображается на холст, даже не добавляя его прямо к холсту? Итак, как я буду устанавливать параметры и строчить их? – softvar

+0

Также, исходя из этого, накладные расходы на обновление вручную каждого параметра при любом преобразовании? Разве есть какая-либо предопределенная вещь в ткани, чтобы позаботиться об этом? – softvar

+0

Хм, я не очень хорошо знаю Fabric.js. Я действительно не знаю, что бы я сделал в этом случае. –

Смежные вопросы