如何在计算的`desc`中对数组值进行排序?

How to sort an array values in `desc` in computed?

我有一个模型值,当我进行每次迭代时它工作正常。

<ul>
    <li>See here : </li>
    {{#each selectedCreditCard.balances.tenures as |balance|}}
    <li>Balances is : {{balance}}</li>
    {{/each}}
</ul>

但我需要按 desc 方式对值进行排序。所以我使用 computed 方法来做 desc 数组。

sortTenuresBy:['desc'],
sortedTenures: Ember.computed.sort('selectedCreditCard.balances.tenures', 'sortTenuresBy'),
maxTenure:Ember.computed(function(){
return this.get('sortedTenures').get('firstObject');

但是出现这样的错误:

Assertion Failed: When using @each to observe the array 3,8,12,24, the array must return an object

如何解决这个问题?请帮助我

如果您查看 APIEmber.computed.sort 的定义;它需要一个 属性 键(在你的例子中是 selectedCreditCard.balances.tenures )和一个排序定义(在你的例子中是 sortTenuresBy )。但是,如果您查看提供的示例;排序定义必须是普通的 属性 名称或 属性 名称后跟排序类型,例如 name:desckey:asc 等等。总之;在您的情况下,不可能将 Ember.computed.sort 用于普通数组。我承认 API 文档含糊不清。

针对您的情况;您必须将计算的 属性 编写为函数;我想这是你不想要的;因为这是常见的方式;或者您可以使用以下 addonember-awesome-macros 的优点在于您可以嵌套提供的计算宏。

如果您查看 API 寻找 array.sort;它说 "combines the functionality of both Array.prototype.sort() and Ember.computed.sort"。因此我们可以使用这个。您希望数组按降序排序;我想像下面这样

sortTenuresBy: array.reverse(array.sort('selectedCreditCard.balances.tenures'))

应该可以。