samedi 18 février 2017

Ember computed property for retrieving one record out of a hasMany relationship?

Here's my situation, simplified:

// model/price-source.js

export default DS.Model.extend({
  price: DS.attr('number'),
  product: DS.belongsTo('product')
)};

// model/product.js

export default DS.Model.extend({
  priceSources: DS.hasMany('price-source')
)};

In my products template, I want to be able to simply refer to the source with the lowest price, like so:

// templates/products.hbs


<span> €</span>


How would I go about setting up the cheapestSource computed property? I imagine I'd have to do something like this:

// model/product.js

  cheapestSource: Ember.computed('priceSources', function() {
    let sources = this.get('priceSources');
    let cheapest = sources.get('firstObject');

    // iterate over sources and set cheapest to whichever has the lowest price

    return cheapest;
  })

The problem is, I have little idea how to loop through the hasMany relationship (apart from using the handlebars helper), and whether a computed property can even consist of a single Ember Data record from another model. Does sources.@each somehow play into this, if so, how?

Any help and ideas are appreciated, thanks.




Aucun commentaire:

Enregistrer un commentaire