Bert & Ernie Ember Data "wtf?" Example
by Nick Iaconis
HTML
<script src="http://builds.emberjs.com/handlebars-1.0.0.js"></script>
<script src="http://builds.emberjs.com/release/ember.js"></script>
<script src="http://builds.emberjs.com/canary/ember-data.js"></script>
<script type="text/x-handlebars" data-template-name="application">
<dl>
{{#each onething in App.oneThings}}
<dt>{{onething.name}}</dt>
{{#each manything in onething.manyThings}}
<dd>{{manything.name}}</dd>
{{/each}}
{{/each}}
</dl>
</script>
JavaScript
App = Ember.Application.create();
App.FixtureAdapter = DS.FixtureAdapter.extend();
App.Store = DS.Store.extend({
adapter: 'fixture'
});
App.OneThing = DS.Model.extend({
name: DS.attr('string'),
manyThings: DS.hasMany('manyThing', { async: true })
});
App.ManyThing = DS.Model.extend({
name: DS.attr('string'),
oneThing: DS.belongsTo('oneThing')
});
App.OneThing.FIXTURES = [{
id: 1,
name: "Bert",
manyThings: [1, 2, 3]
}, {
id: 2,
name: "Ernie",
manyThings: [4, 5]
}];
App.ManyThing.FIXTURES = [{
id: 1,
name: "coffee",
oneThing: 1
}, {
id: 2,
name: "newspaper",
oneThing: 1
}, {
id: 3,
name: "seriousness",
oneThing: 1
}, {
id: 4,
name: "rubber duckie",
oneThing: 2
}, {
id: 5,
name: "imagination",
oneThing: 2
}];
App.reopen({
ready: function() {
var store = App.__container__.lookup('store:main');
App.set('oneThings', store.find('oneThing'));
Ember.run.later(this, function() {
App.get('oneThings').objectAt(0).save();
Ember.debug('saved');
var store = App.__container__.lookup('store:main'),
newRecord = store.createRecord('manyThing', {
name: "his friend, Bert",
oneThing: App.get('oneThings').objectAt(1)
});
newRecord.save();
Ember.debug('new record');
Ember.run.later(this, function() {
var ernie = App.get('oneThings').objectAt(1),
erniesManyThings = ernie.get('manyThings')
erniesManyThings.pushObject(newRecord); // push from closure
Ember.debug('manually pushed');
}, 2000);
}, 2000);
return this._super.apply(this, arguments);
}
});
DS.JSONSerializer.reopen({
serializeHasMany : function(record, json, relationship) {
var key = relationship.key;
var relationshipType =...