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}}
我有一个图书模型,我使用 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}}