2012-01-27 24 views
21

me di cuenta de esto en la página web EmberJS bajo Filtrado:Ordenar un array de objetos EmberJS por la propiedad

Otra tarea común para llevar a cabo en una Enumerable es tomar el Enumerable como entrada y devolver una matriz después clasificando o filtrándolo según algunos criterios.

Imagine que tengo una matriz de objetos Ember, ¿cómo hago para clasificarlos por propiedad?

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}) 
    ] 
}) 

¿Qué pasa si quiero ordenar lo anterior por edad? ¡Gracias por tu ayuda!

EDIT: encontré esto en la documentación SproutCore pero no parece trabajar con Ember:

se puede ordenar una Enumerable basado en el valor de una propiedad o una lista de propiedades que utilizan sortProperty . Si transfiere varias propiedades, SproutCore ordenará los elementos con el mismo valor para la primera propiedad por el valor del segundo parámetro, y así sucesivamente.

la Sección 3.8 de esta página: http://guides.sproutcore20.com/enumerables.html

Respuesta

11

As described here ahora se puede ordenar su ArrayController.

La forma de hacerlo es proporcionar propiedades adicionales en su ArrayController (pegado de enlace de arriba):

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'} 
3

Como se discutió en https://github.com/emberjs/ember.js/issues/335 clasificación no se aplica más en el ember.js paquete central.

+0

Ok alguna idea de cómo hacer este trabajo, entonces? – skinneejoe

+6

Parece estar de vuelta como SortableMixin. http://docs.edge.emberjs.com/symbols/Ember.SortableMixin.html –

11

EDITAR: La siguiente solución parece aplicarse solo a valores numéricos. Sin embargo, este enlace le dará consejos sobre cómo manejar alfanuméricos, fechas, etc.: http://www.javascriptkit.com/javatutors/arraysort2.shtml

No importa, lo descubrí. Puede hacerlo con Javascript, construidas en un método para ordenar:

//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'); 
}); 
Cuestiones relacionadas