Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
In Ember-CLI, transforms are located in app/transforms/name.js
// app/transforms/array.js
import Ember from 'ember';
import DS from 'ember-data';
export default DS.Transform.extend({
deserialize: function(value) {
if (Ember.isArray(value)) {
return Ember.A(value);
} else {
return Ember.A();
}
},
serialize: function(value) {
if (Ember.isArray(value)) {
return Ember.A(value);
} else {
return Ember.A();
}
}
});
// app/transforms/object.js
import Ember from 'ember';
import DS from 'ember-data';
export default DS.Transform.extend({
deserialize: function(value) {
if (!Ember.$.isPlainObject(value)) {
return {};
} else {
return value;
}
},
serialize: function(value) {
if (!Ember.$.isPlainObject(value)) {
return {};
} else {
return value;
}
}
});
@seanpdoyle

This comment has been minimized.

Copy link

seanpdoyle commented Apr 2, 2015

Couldn't these transforms be replaced with calls to DS.attr() (type string intentionally omitted)?

http://emberjs.com/api/data/classes/DS.html#method_attr

DS.attr defines an attribute on a DS.Model. By default, attributes are passed through as-is, however you can specify an optional type to have the value automatically transformed. Ember Data ships with four basic transform types: string, number, boolean and date. You can define your own transforms by subclassing DS.Transform.

@tmquinn

This comment has been minimized.

Copy link

tmquinn commented Apr 10, 2015

the real trick of this would be accurate dirty checking

@billpull

This comment has been minimized.

Copy link

billpull commented Jul 15, 2015

@seanpdoyle DS.attr('array') and DS.attr('object') are not supported by default in ember data only "string, number, boolean and date" so you have to define the transforms yourself.

@jessepinho

This comment has been minimized.

Copy link

jessepinho commented Aug 16, 2015

@billpull Point is, if you don't specify a type in your call to DS.attr(), they'll be passed through as-is, and just work. I just tried this out myself and it worked fine.

@cloke

This comment has been minimized.

Copy link

cloke commented Jul 6, 2017

Sort of late to the conversation, but I find these transforms useful if you want to use defaultValue with the attr. Otherwise you are correct, the objects just pass through when no attributes type is passed in.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.