Ember 1.0 RC


Today at Ember Camp, we announced the release of Ember.js 1.0 RC1.
This release is all about fixing bugs from the pre4 release, and
gets us that much closer to a final 1.0 release. Between this release
and the 1.0 final, we will mostly be focusing on stability and documentation.
If you discover any blocking bugs or undocumented areas, please file tickets at
the emberjs/ember.js repo on GitHub and consider helping out.
Route Replacement
You can now transition to a new route without creating an entry in the history:
// instead of this, which creates a history entry
router.transitionTo('index');

// do this
router.replaceWith('index');

In the redirect hook, you can use replaceWith and Ember won't create
a history entry.
In a controller, you can use replaceRoute (instead of transitionToRoute)
to do the same thing.
Item Controller
If you want every item in a {{#each}} to be wrapped in an ObjectController,
you can do so:
{{#each posts itemController="post"}}
{{!-- `this` in here is each post wrapped in an App.PostController --}}
{{/each}}

Register and Inject
Internally, Ember uses a "container" to instantiate your controllers and other
objects.
As of Ember 1.0 RC1, you can use App.register to override the default lookup
for controllers and other objects. For example:
App.register('controller:post', Ember.ObjectController.extend());

In general, you should use the default naming conventions, which Ember will use
to find objects, but you can use this API for advanced usages.
Similarly, you can use App.inject to tell Ember to automatically inject
objects into other Ember objects.
App.register('network:main', App.NetworkAdapter);
App.inject('controller', 'network', 'network:main');

This will create a single instance of App.NetworkAdapter and give it to every
controller created over the course of building your application. Internally,
Ember Data uses this API to give every controller the application's store:
Router Activate and Deactivate
Currently, many people are using the undocumented and private enter and
exit hooks to run code whenever Ember activates a route handler or
deactivates it.
As of Ember 1.0 RC1, there are public hooks: activate and deactivate. Note
that the activate hook will run only when a route handler is activated for
the first time. If a route handler's context changes, the setupController
hook will run again, but not the activate hook.
App.reset()
If you are trying to run integration tests with Ember, you might have noticed
that there is no good way to reset all of an application's state.
No more!
As of Ember 1.0 RC1, you can call App.reset() to destroy all objects created
for the application, and bring the application back to /.
Big List of Changes
Since .pre4, we've added these features:

  • Added the ability to replace the current route without adding a history
    entry, using router.replaceWith
  • Added support for String literals in {{action}} and {{linkTo}} to
    differentiate between static String parameters and properties on the current
    context
  • Allow redirection from routes that are not the final resting route
  • Fix a bug where using named outlets would confuse where child templates should
    be rendered into
  • Add itemController, which allows a {{#each}} to wrap each iterated element
    in a controller that can be used to store transient state
  • Fix a bug involving {{else}} templates only working a single time
  • Add intersection to EnumerableUtils
  • Added App.register and App.inject to control the default application's
    dependency injection container
  • Fixes regressions in jQuery 1.9 to address changes made to .attr and .prop
  • Add support for {{unbound helper}} where helper is a custom helper
    registered via Ember.Handlebars.registerBoundHelper
  • Added Ember.debug to print debug-level warnings and use it to print the
    current version of Ember and its dependencies on boot
  • Fix a bug where changing the model property passed to {{render}} does not
    update the rendered template
  • Added public activate and deactivate hooks in the router. If you were
    using the private enter and exit methods, please switch!
  • Added Application#reset to help with integration tests
  • Several fixes for the Ember Inspector
  • Many bug and performance fixes

You can see the full changelog at the official CHANGELOG.