Skip to content

Instantly share code, notes, and snippets.

@NuckChorris
Forked from pixelhandler/transforms.js
Last active February 12, 2018 19:47
Show Gist options
  • Save NuckChorris/927d7d4ba757abd26b30 to your computer and use it in GitHub Desktop.
Save NuckChorris/927d7d4ba757abd26b30 to your computer and use it in GitHub Desktop.
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
Copy link

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
Copy link

tmquinn commented Apr 10, 2015

the real trick of this would be accurate dirty checking

@billpull
Copy link

@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
Copy link

@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
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