dagda1
dagda1

Reputation: 28930

Mapping data in ember-data

I have a basic ember-data model object:

App.Group =  DS.Model.extend({
//attributes
});

I have json which is structured like this:

root.levelone.leveltwo.property

I don't want to map this project as is but would like to map property in the json to property in the model like this:

App.Group =  DS.Model.extend({
  property: DS.attr('string')
});

Is it possible to define a mapping that is different from the incoming json? I don't have much control on what is coming from the server.

If this is not possible with ember-data, what is the best way to model this deep nesting?

Upvotes: 2

Views: 2437

Answers (4)

Dmitry Demidenko
Dmitry Demidenko

Reputation: 3407

Ember data v 1.0 beta 2 requires this approach:

CustomTransform = DS.Transform.extend({
  deserialize: function(serialized) {
    ...
  },

  serialize: function(deserialized) {
    ...
  }
});

Ember.Application.initializer({
    name: "customTransforms",

    initialize: function(container, application) {
      application.register('transform:custom', CustomTransform);
    }
});

Upvotes: 2

Kirk
Kirk

Reputation: 1541

IT changed FROM THIS:

DS.attr.transforms.object = {
  from: function(serialized) {
    return Em.none(serialized) ? {} : serialized;
  },
  to: function(deserialized) {
    return Em.none(deserialized) ? {} : deserialized;
  }
}

TO THIS:

DS.RESTAdapter.registerTransform('object', {
  fromJSON: function(serialized) {
    return Em.none(serialized) ? {} : serialized;
  },
  toJSON: function(deserialized) {
    return Em.none(deserialized) ? {} : deserialized;
  }
})

Upvotes: 3

Mayank Patel
Mayank Patel

Reputation: 339

FYI, the latest version of Ember (v.10) requires custom transforms to be defined on the DS.JSONTransforms object. And the 'to' and 'from' properties have been renamed to 'serialize' and 'deserialize'.

Upvotes: 4

Bradley Priest
Bradley Priest

Reputation: 7458

I'm not sure quite what you're asking but you can define custom DS.attr transforms.

Something like this maybe? Haven't tested it.

DS.attr.transforms.deepNest = {
  from: function(serialized) {
    return this.root2.property
  },
  to: function(deserialized) {
    return { root2: property }
  }
}

property: DS.attr('deepNest', {key: 'root1'})

Upvotes: 3

Related Questions