We are pleased to announce the release Ember Data 1.0.0-beta.16. It
includes many bug fixes as well as several new features. As always
this release can be obtained from npm (for use with ember-cli),
rubygems, or bower. The builds are also available as static files at
emberjs.com/builds
The 1.0.0-beta.16 release represents the effort of at least 31
contributors across over 112 commits.
New Core Contributor
Contributor Christoffer Persson has been given collaborator
status and will help us triage issues, merge pull requests, and
contribute bug fixes and documentation. Christoffer has been extremely
active in triaging issues and contributing features and bug fixes to
the Ember Data project.
Breaking Changes
The store now passes snapshots instead of records to adapter methods
In 1.0.0-beta.15 Ember Data introduce the Snapshot API and began
passing snapshot instances into all serializers to prevent
side-effects from occurring when inspecting relationships for
serialization. This introduces some pain points in 3rd party adapters
and serializers since they could not easily create snapshot instances
without using private APIs. In Ember Data 1.0.0-beta.16 the
store will now pass snapshot instances into adapters methods instead
of record instances.
The following adapter methods now receive snapshots instead of records:
find(store, type, id, snapshot)
findMany(store, type, ids, snapshots)
findHasMany(store, snapshot, url, relationship)
findBelongsTo(store, snapshot, url, relationship)
createRecord(store, type, snapshot)
updateRecord(store, type, snapshot)
deleteRecord(store, type, snapshot)
The signature of buildURL(type, id, snapshot)
has also been updated to receive
snapshots instead of records.
This change removes the need for adapters to create snapshots manually using the
private API record._createSnapshot()
to be able to pass snapshots to
serializers.
Snapshots are backwards-compatible with records (with deprecation warnings) and
it should be pretty straight forward to update current code to the public
Snapshot API:
post.get('id') => postSnapshot.id
post.get('title') => postSnapshot.attr('title')
post.get('author') => postSnapshot.belongsTo('author')
post.get('comments') => postSnapshot.hasMany('comments')
post.constructor => postSnapshot.type;
post.constructor.typeKey => postSnapshot.typeKey
If you need to access the underlying record of a snapshot you can do so by
accessing snapshot.record
.
The full API reference of DS.Snapshot
can be found here.
Improvements
Store as a Service
The store has now been registered as a service. So when you are using
Ember Data 1.0.0-beta.16 with Ember 1.10+ you can now inject the store
into any Ember object managed by the container.
App.TweetComposerComponent = Ember.Component.extend({
store: Ember.inject.service(),
newTweet: function() {
return this.get('store').createRecord('tweet', {});
}
});
Please give a warm thanks to martndemus for his
work implementing this feature!
Mixins in Polymorphic Relationships
Igor Terzic Added support for using mixins in polymorphic
relationships. This allows Ember Data to reference Mixins instead of
Model classes as the type argument for relationships.
App.Comment = DS.Model.extend({
owner: belongsTo('commentable', { polymorphic: true })
});
App.CommentableMixin = Ember.Mixin.create({
comments: hasMany('comment')
});
Better Support for using multiple stores
James Murphy landed an
awesome PR that makes it
easier to use multiple stores in your Ember Application.
Changelog
In addition to the major changes mentioned above this release also
includes many bug fixes and documentation updates. Be sure to check
out the change log for the full list of updates.