ember 模型和计算属性有问题

Trouble with ember model and computed properties

我有一个图书模型,我使用 mapBy() 计算 属性 来检索模型中的所有价格。 allPrices: mapBy('books', 'price'); 然后我使用 max() 来获得最高值。 maxPrice: max('allPrices'); 该部分按预期工作。 我遇到的问题是我想显示最高价格和与该价格相关的书名,但我不知道该怎么做。

<h2>Max book price: {{format-currency maxPrice}} </h2>
<h2>Which belongs to the book {{book.title}} </h2>

如何实现?任何帮助将不胜感激。

所以有几件事:

您需要的是最高价的图书本身。 为了得到它,只需按价格降序排列书籍并获得第一本。

执行此操作后,您的模板将变为:

<h2>Max book price: {{format-currency bookWithMaximumPrice.price}} </h2>
<h2>Which belongs to the book {{bookWithMaximumPrice.title}} </h2>

一种javascript方法如下:

bookWithMaximumPrice: computed('books.@each.price', function() {
  let books = this.get('books');
  let booksSortedByPrice = books.toArray().sort(function(bookA, bookB) {
    return bookB.get('price') - bookA.get('price');
  });
  return booksSortedByPrice.get('firstObject');
});

一种更 Emberish 的方法是使用计算宏首先按价格排序,然后获取第一个:

sortProperties: ['price:desc'],
booksSortedByPrice: computed.sort('books', 'sortProperties'),
bookWithMaximumPrice: computed.readOnly('booksSortedByPrice.firstObject')

使用排序计算 属性 -

sortProperties: ['price'],
sortedBooks: sort('books', 'sortProperties'),
highestPricedBook: alias('sortedBooks.lastObject')

{{highestPricedBook.price}}
{{highestPricedBook.name}}