Ember Data v1.0.0-beta.12 Released
New Core Contributors
Long-time contributors Brendan McLoughlin and Sylvain Mina have been given collaborator status and will help us triage issues, merge pull requests, and contribute bugfixes and documentation.
New Features
store.fetch
When using Ember Data, the most common pattern in the model
hook is to call
store.find
for your model:
export default var PostRoute = Ember.Route.extend({
model: function(params) {
return this.store.find('post', params.post_id);
}
});
store.find
will return the instance of the Post
record if it has already
been fetched in the store. Sometimes, this is not desirable. For example, you
may not know if you have already loaded the post in another request via
sideloading, or you want the most up to date information. You could either
check if the record existed using
store.hasRecordForId, or always call
reload on your model in the route's afterModel
hook.
store.fetch
wraps this common pattern by reloading a record if it exists in
the store, or reloads the record if it doesn't exist:
model: function(params){
return this.store.fetch('post', params.post_id);
}
Please give a warm thanks to Tom Coquereau for his pull request implementing this feature!
Bugfixes
relationship.createRecord() returns the record instead of a promise
Prior to Ember Data v1.0.0-beta.11, the following code would give you direct access to a record:
var post = store.createRecord('post');
var comment = post.get('comments').createRecord('comment');
In beta.11, it returned a Promise, meaning you couldn't call things like
set/get
on the resulting record. This regression has been fixed in beta.12
thanks to Sébastien Grosjean.
Breaking Changes
Internet Explorer 8 Requires Ember 1.8
A bug in Ember 1.7's Ember.create
method (which is a polyfill for
Object.create
) combined with a bug in es5-shim's Object.create
prevent us
from giving Ember Data users a good alternative to use. Internally, Ember Data
uses Object.create
for efficient caches. Ember 1.8 ships a working
Object.create
polyfill on Ember.create
so if you are using Internet
Explorer 8 and Ember Data in production, you should upgrade to Ember 1.8 as
soon as you can.
If you are using browsers that provide Object.create
, you do not need to do
any additional work here. This includes mobile browsers, evergreen browsers
(Chrome, Opera, Firefox), Safari, and IE9+.
Ember 1.7 Support Will Be Completely Dropped in Beta.13
Ember Data relies heavily on JavaScript language-level shims (such as the
Object.create
issue mentioned above) and other useful internals that Ember
provides. Rather than creating our own detection algorithms and more polyfills
for broken code in Ember 1.7, we are deciding to drop 1.7 support in the next
release of Ember Data. We do so in order to not increase the final size of
Ember Data's build. You should upgrade to Ember 1.8 as soon as you can.
Observing data
For Changes Has Been Removed
Although model.get('data')
has been private in Ember Data for a long time, we
have noticed users may subscribe to changes on data
for any change to the
model's attributes. This means that the following code:
var Post = DS.Model.extend({
doSomethingWhenDataChanges: function(){
// do the work
}.property('data')
});
no longer works. Instead, you should watch each attribute like you
would with any Ember.Object
:
var Post = DS.Model.extend({
name: DS.attr(),
date: DS.attr(),
doSomethingWhenDataChanges: function(){
// do the work
}.property('name', 'date')
});
This change fixed some bugs around observers. Thanks to Christoffer Persson for helping to clean this up and fix some observer bugs around this!
Special Thanks
Thanks to Christoffer Persson for helping us implement bugfixes and API changes, as well as triaging issues.