Search code examples
ampersand.jsampersand-collection

Custom data unwrapping in ampersand.js model


I have a model - Configuration:

var Configuration = Model.extend({
    props: {
        name: 'string'
    }
});

In the database, configuration model / table has 3 columns -> id, name and fields. The latter stores site config as a serialized array. When retrieving the entry from the database, I unserialize it and then pass it to the front end, so the front end receives this:

{
    "id": 1, 
    "name": 'global',
    "fields": {
        "enabled": true,
        "site_name": "Test"
    }
};

What I want to do is to set whatever is inside fields object as properties on my model, or maybe session so that things get triggered throughout the site when they are updated. To visualize it, I want to achieve something like this:

var Configuration = Model.extend({
    props: {
        enabled: 'boolean',
        site_name: 'string'
    }
});

So basically, is there are a way to 'unwrap' stuff in fields object somehow?


Solution

  • The parse method is what you're looking for in this case. See https://github.com/AmpersandJS/ampersand-state/blob/master/ampersand-state.js#L93-L98 It allows you to transform incoming props.