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, usingrouter.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
toEnumerableUtils
- Added
App.register
andApp.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}}
wherehelper
is a custom helper
registered viaEmber.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
anddeactivate
hooks in the router. If you were
using the privateenter
andexit
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.