2013-02-18 3 views
3

Я создаю интерактивную среду на основе kinetic.js. Я хочу сохранить и загрузить состояние холста вместе с метаданными.Слияние сериализации холста с метаданными

Я уже знаю, что могу использовать stage.toJSON() для сериализации/сохранения и использования Kinetic.Node.create(stageJson, 'container') для загрузки. Но я хотел бы добавить произвольные данные к этой сериализации, которые будут отслеживать дополнительные свойства, которые моя среда будет определять/использовать.

Пример стандартного kinetic.js сериализации:

{ 
    "attrs": { 
     "width": 578, 
     "height": 200, 
     "x": 0, 
     "y": 0 
    }, 
    "nodeType":"Shape", 
    "shapeType":"Rect" 
} 

пример того, что я хотел бы иметь возможность сохранения/загрузки вместо:

{ 
    "attrs": { 
     "width": 578, 
     "height": 200, 
     "x": 0, 
     "y": 0 
    }, 
    "nodeType":"Shape", 
    "shapeType":"Rect", 
    "metaData": {"foo": "bar"} 
} 

Что бы быть лучшим подходом здесь? Я мог взломать/обернуть функции сериализации и загрузки для добавления/выталкивания метаданных, прежде чем передавать их, но это кажется неуклюжим и трудно реализуемым, особенно если есть много вложенных слоев и форм для синтаксического анализа. Я мог бы сэкономить две совершенно отдельные сериализации: одну, созданную kinetic.js, и параллельную, созданную моим собственным кодом, но опять же неуклюжий. У кого-нибудь есть лучшие идеи?

ответ

2

toJSON() сериализует все характеристики сцены (Node).
Я не пробовал, но кажется, что вы можете добавить свои собственные атрибуты на сцену, используя setAttr(key,val). После их установки они будут сериализованы, и я также предполагаю, что они также десериализованы ...

Обратите внимание, что это не то, о чем вы просили, поскольку дополнительные данные не находятся на корневом уровне JSON, а в подстроке attrs, объект

+0

Вы верны! Это прекрасно, спасибо. – Chris

+0

Я мог бы быть глупым, но, похоже, не существует 'getAttr (key)' метода 'Node', просто' getAttrs() 'в стиле дробовика. Странный. – Chris

+0

'getAttrs(). KeyName' будет делать только штраф – Variant