Ember Data Example

The latest build of Ember.

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">
   Test
</script>

JavaScript

App = Ember.Application.create({});

App.Child = DS.Model.extend({
    name: DS.attr('string'),
    toys: DS.hasMany('toy', {embedded: 'always'}),
});
App.Toy = DS.Model.extend({
    kind: DS.attr('string'),
    size: DS.belongsTo('size', {embedded: 'always'})
});
App.Size = DS.Model.extend({
    height: DS.attr('number'),
    width: DS.attr('number'),
    depth: DS.attr('number')
});

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 (relationship.options.embedded === 'always') {
            if (hasMany && relationshipType === 'manyToNone' || relationshipType === 'manyToMany' ||
                relationshipType === 'manyToOne') {
                
                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'),
                child, toy;
            child = store.createRecord('child', {
                name: 'Herbert'
            });
            toy = store.createRecord('toy', {
                kind: 'Kazoo'
        ...