I’m a Rails developer learning Ember, and getting a little confused, but liking it a lot.
I’m building the admin of a simple app, where the admin can approve posts before they go live.
I managed to list the posts, and now I want to show a count on the tab title.
Here is what I made so far:
http://jsbin.com/aSEheWE/2#/posts/
What is the Ember way to show the post count?
Tks!
First of all I took the liberty of updating your JSBin to the latest Ember and Ember Data. What’s the point of working with Ember if you aren’t using bleeding edge code from a day ago? *laughs that turn into crying*
When you want to show something in your template that isn’t directly from your model you should start thinking about controllers. A controller is like a decorator for the models and content that you’re showing in your template. The template you’re concerned with here is tied to your ApplicationController
. That controller was generated by convention, so I needed to make an explicit one.
Next you need to know about computed properties. You want to present a property to the view that changes based on the number of posts you have.
postCount: function() {
return this.get('allPosts.length');
}.property('allPosts.length')
Then you need to know a little something about how Ember Data works. It keeps a cache of all your records in something called a RecordArray
. You can get at that guy by using something like this.get('store').all('posts')
. This returns an instance of an ArrayProxy
that will keep updating as you add and remove records.
Finally we need to create a property to hold allPosts
on your ApplicationController
so that you can watch it.
allPosts: function() {
return this.get('store').all('post');
}.property(),
Rather than setting up this allPosts
property on your ApplicationController
, some might opt to instead look at the PostsController
for the list of all posts. For that you would setup a needs
relationship to the PostsController
and your postCount
function would look more like this:
postCount: function() {
return this.get('controllers.posts.length');
}.property('controllers.posts.length')
What you want to do will depend on how and when you want to load your data, but that could be a pretty big topic in itself. Hope that helped!
Here’s the JSBin.
4 Likes