Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Display the first item in hasMany ember relationship in handlebars template

I need to display the first item in an hasMany relationship

Basically a thread could have more than 1 author but I need to display only the first one in a particular template

I've the following json

{
    threads: [
        {
           id: 1,
           authors: [2,3]
        }
    ],
    authors: [
        {
            id: 2,
            fullname: "foo"
        },
        {
            id: 3,
            fullname: "bar"
        }
    ]        
}

And the following models

App.Thread = DS.Model.extend({
    authors: DS.hasMany('author')
});

App.Author = DS.Model.extend({
    fullname: DS.attr('string')
});

now in my template I'm tring to do something like {{thread.authors[0].fullname}} but it doesn't work. I've tried also thread.authors.0.fullname according to the handlebars syntax but nothing changed.

Thnx in advance for your help

like image 465
Fed03 Avatar asked Apr 01 '14 19:04

Fed03


1 Answers

Use Ember.Enumerable's firstObject:

{{thread.firstObject.fullName}}

If you are going to use it in a lot of places, its best to define it as a computed property in the model:

App.Thread = DS.Model.extend({
  authors: DS.hasMany('author')

  firstAuthor: Ember.computed.alias('authors.firstObject')
});

and use it in your templates as:

{{firstAuthor.name}}
like image 137
Panagiotis Panagi Avatar answered Sep 22 '22 20:09

Panagiotis Panagi