Trier tableau des objets EmberJS par propriété

J'ai remarqué cela sur le site EmberJS sous filtrage:

Une autre tâche courante à effectuer sur un Enumerable est de Énumérable en entrée et retourne un Tableau après tri ou le filtrage en fonction de certains critères.

Imaginez que j'ai un tableau d'objets Ember, Comment puis-je les Trier par propriété?

App.DemoArray = Ember.ArrayController.create({
    content:[
        Ember.Object.create({name:'Joe', Age:29}),
        Ember.Object.create({name:'Jim', Age:53}),
        Ember.Object.create({name:'Jack', Age:12})
    ]
})

Que faire si je voulais trier ce qui précède par âge? Merci pour votre aide!

Modifier: J'ai trouvé ça dans le documentation sproutcore mais cela ne semble pas fonctionner avec Ember:

Vous pouvez trier un énumérable en fonction de la valeur d'une propriété ou d'une liste de propriétés utilisant sortProperty. Si vous transmettez plusieurs propriétés, SproutCore va trier les éléments avec la même valeur pour la première propriété par la valeur du deuxième paramètre, et ainsi de suite.

Section 3.8 sur cette page: http://guides.sproutcore20.com/enumerables.html

21
demandé sur skinneejoe 2012-01-28 03:36:27

5 réponses

Comme décrit ici vous pouvez maintenant trier vos ArrayController.

La façon dont vous le faites est de fournir des propriétés supplémentaires sur votre ArrayController (collé à partir du lien ci-dessus):

songs = [
  {trackNumber: 4, title: 'Ob-La-Di, Ob-La-Da'},
  {trackNumber: 2, title: 'Back in the U.S.S.R.'},
  {trackNumber: 3, title: 'Glass Onion'},
];

songsController = Ember.ArrayController.create({
  content: songs,
  sortProperties: ['trackNumber'],
  sortAscending: true
});

songsController.get('firstObject');  // {trackNumber: 2, title: 'Back in the U.S.S.R.'}
songsController.addObject({trackNumber: 1, title: 'Dear Prudence'});
songsController.get('firstObject');  // {trackNumber: 1, title: 'Dear Prudence'}
11
répondu Willem de Wit 2013-04-08 13:48:45

Es MutableArray est un sortBy méthode:

Https://emberjs.com/api/ember/release/classes/MutableArray

16
répondu Nath 2018-10-01 04:21:35

EDIT: la solution ci-dessous semble s'appliquer uniquement aux valeurs numériques. Cependant, ce lien donnera des conseils sur la façon de gérer alphanumérique, dates, etc: http://www.javascriptkit.com/javatutors/arraysort2.shtml

Peu importe, j'ai compris. Vous pouvez le faire avec Javascripts construit dans la méthode de tri:

//To sort ASC
var sorted = content.sort(function(a,b) {
    return a.get('propertyYouWantToSortBy') - b.get('propertyYouWantToSortBy');
});

//To sort DESC
var sorted = content.sort(function(a,b) {
    return b.get('propertyYouWantToSortBy') - a.get('propertyYouWantToSortBy');
});
11
répondu skinneejoe 2012-01-30 19:00:11

Au cas où quelqu'un rencontrerait cela, la façon mise à jour de trier dans ember est

 Ember.computed.sort('nameOfArrayToSort', sortDefinition)

SortDefinition peut être un tableau de chaînes

 ['mainSortProperty:asc', 'secondarySortProp:desc', ...]

Ou une fonction de comparaison

Docs ici: http://emberjs.com/api/classes/Ember.computed.html#method_sort

4
répondu stevethecollier 2015-10-05 17:54:41

Comme discuté dans https://github.com/emberjs/ember.js/issues/335 le tri n'est plus implémenté dans le paquet core ember.js.

3
répondu pangratz 2012-01-28 09:31:02