2017-10-04 4 views
0

Ich habe einen Modellwert, wenn ich die Iteration mache, funktioniert es gut.Wie sortiere ich Array-Werte in `desc` in berechnet?

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

Aber ich brauche, um den Wert von desc Weg sortiert. also verwende ich die computed Methode, um das desc Array zu tun.

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

Aber Fehler immer so wie folgt aus:

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

, wie dieses Problem beheben? bitte helfen Sie mir

+0

Das Hauptproblem ist, ich habe nicht den Schlüssel für Werte. es ist nur ein roher Array wie [1,2,3,4] – 3gwebtrain

+0

Wenn Sie 'max' erhalten möchten, können Sie [Ember.computed.max] (https://www.emberjs.com/api/ember/) verwenden 2.15/Namespaces/Ember.computed/Methoden/max? Anchor = max) – ykaragol

Antwort

1

Wenn Sie sich ansehen API Definition für Ember.computed.sort; es erfordert einen Eigentumsschlüssel (das ist in Ihrem Fall selectedCreditCard.balances.tenures) und eine Sortierdefinition (das ist in Ihrem Fall sortTenuresBy). Allerdings, wenn Sie sich die Beispiele ansehen; Die Sortierdefinition muss entweder ein einfacher Eigenschaftsname oder ein Eigenschaftsname sein, gefolgt von einem Sortiertyp wie name:desc oder key:asc und so weiter. Zusammenfassend; Es ist nicht möglich, Ember.computed.sort für einfache Arrays wie in Ihrem Fall zu verwenden. Ich gebe zu, die API-Dokumentation ist vage.

Für Ihren Fall; Sie müssen die berechnete Eigenschaft entweder als Funktion schreiben; was du nicht willst, nehme ich an; weil es der übliche Weg ist; oder Sie können die folgenden addon verwenden. Was ist großartig an ist, können Sie die bereitgestellten berechneten Makros verschachteln.

Wenn Sie API für array.sort betrachten; Es sagt "kombiniert die Funktionalität von Array.prototype.sort() und Ember.computed.sort". Daher können wir diesen verwenden. Sie möchten, dass das Array in absteigender Reihenfolge sortiert wird. Ich nehme an, etwas wie das Folgende

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

sollte funktionieren.