2017-10-04 75 views
0

我有一个模型值,当我做每个迭代它工作正常。如何在计算中对`desc`中的数组值进行排序?

<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 

如何解决这一问题?请帮我

+0

主要问题是我没有价值的关键。它只是一个原始数组,如[1,2,3,4] – 3gwebtrain

+0

如果你想获得'max',你可以使用[Ember.computed.max](https://www.emberjs.com/api/ember/ 2.15 /命名空间/ Ember.computed /方法/最大?锚=最大值) – ykaragol

回答

1

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

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

如果你看APIarray.sort;它说“结合了Array.prototype.sort()和Ember.computed.sort的功能”。因此我们可以使用这个。您希望数组按降序排序;我想像下面这样的东西

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

应该工作。

相关问题