How do you serialise Ember objects?

deserialization, ember.js, serialization

Solution

For serialization and deserialization you could do something along this lines, see http://jsfiddle.net/pangratz666/NVpng/:

App.Serializable = Ember.Mixin.create({
    serialize: function() {
        var propertyNames = this.get('propertyNames') || [];
        return this.getProperties(propertyNames);
    },

    deserialize: function(hash) {
        this.setProperties(hash);
    }
});

App.Person = Ember.Object.extend(App.Serializable, {
    propertyNames: 'firstName title fullName'.w(),
    fullName: function() {
        return '%@ %@'.fmt(this.get('title'), this.get('firstName'));
    }.property('firstName', 'title')
});

var hansi = App.Person.create({
    firstName: 'Hansi',
    title: 'Mr.'
});

// { firstName: 'hansi', title: 'Mr.', fullName: 'Mr. Hansi' }
console.log( hansi.serialize() );

var hubert = App.Person.create();
hubert.deserialize({
    firstName: 'Hubert',
    title: 'Mr.'
});
console.log( hubert.serialize() );​

UPDATE: Also have a look at the similar question Ember model to json

Problem

I need to use localStorage to store some Ember objects. I notice that Ember objects have properties with names like `__ember1334992182483`. When I call `JSON.stringify()` on Ember objects, these `__ember*` properties are not serialised. Why is this? I'm not saying that I want to serialize those properties. I am just curious about what exactly they are and how they are implemented such that they are not serialised. I am using cycle.js (https://github.com/douglascrockford/JSON-js/blob/master/cycle.js) to encode my data structures that contain duplicate references into a string that can be used for reconstructing the original data structures. It lets you do this: ``` a = {a:1} b = {b:1} c = [[a, b], [b, a]] foo = JSON.stringify(JSON.decycle(c)) // "[[{'a':1},{'b':1}],[{'$ref':'$[0][1]'},{'$ref':'$[0][0]'}]]" JSON.retrocycle(JSON.parse(foo)) // reconstruct c ``` For Ember objects I can do the same thing, but I also need to pass the deserialised objects into `Ember.Object.create()` because they are deserialised as plain JavaScript objects. Is this the best way to serialise/deserialise Ember objects? Is there a recommended technique for this?

Original source

Related problems