Ember Data Example
The latest build of Ember.
by Jeremy Gillick
HTML
<script src="http://builds.emberjs.com/handlebars-1.0.0.js"></script>
<script src="http://builds.emberjs.com/ember-latest.js"></script>
<script src="http://builds.emberjs.com/tags/v1.0.0-beta.4/ember-data.prod.js"></script>
<script type="text/x-handlebars" data-template-name="index">
<button {{action "save"}}>Save</button>
</script>
JavaScript
App = Ember.Application.create({});
App.Post = DS.Model.extend({
title: DS.attr('string'),
comments: DS.hasMany('comment', {embedded: 'always'}),
});
App.Comment = DS.Model.extend({
post: DS.belongsTo('post'),
body: DS.attr('string')
});
DS.JSONSerializer.reopen({
serializeBelongsTo: function(record, json, relationship) {
var key = relationship.key,
belongsTo = Ember.get(record, key);
key = this.keyForRelationship ? this.keyForRelationship(key, "belongsTo") : key;
if (relationship.options.embedded === 'always') {
json[key] = belongsTo.serialize();
}
else {
return this._super(record, json, relationship);
}
},
serializeHasMany: function(record, json, relationship) {
var key = relationship.key,
hasMany = Ember.get(record, key),
relationshipType = DS.RelationshipChange.determineRelationshipType(record.constructor, relationship);
if (hasMany && relationship.options.embedded === 'always') {
json[key] = [];
hasMany.forEach(function(item, index){
json[key].push(item.serialize());
});
}
else {
return this._super(record, json, relationship);
}
}
});
App.IndexController = Em.ObjectController.extend({
actions: {
save: function(){
var store = this.get('store'),
post, comment;
post = store.createRecord('post', {
id: 1,
title: 'Soylent Green is People'
});
comment = store.createRecord('comment', {
post: post,
body: 'It\'s only a conspiracy, get your facts straight.'
});
post.get('comments').pushObject(comment);
console.log(post.serialize());
}
}
});