2012-08-08 26 views
5

Tengo una lista de tareas pendientes con nombre y fecha. Me gustaría poder ordenar la lista usando el título o la fecha. ¿Cómo haría esto? El comparador permite solo un tipo de clasificación.Colección Backbone.js con varios tipos

Gracias.

+1

¿Puedo preguntar por qué no desea restablecer la colección? Hay desencadenadores de restablecimiento (para las vistas) por esta razón exacta. es decir, cuando su clasificación cambia a través de un restablecimiento, su vista se vuelve a renderizar. –

+0

Tiene razón, no veo ninguna desventaja al restablecer toda la colección. Gracias. – chenglou

+0

Es normal restablecer una colección cuando cambian los datos, en su caso toda la colección, aunque son los mismos datos pero en orden diferente –

Respuesta

1

Creo que he encontrado un método:

collection.reset(collection.sortBy(function(item){ 
    return item.get(sortingFIeld); 
})) 

Dónde sortBy devuelve una nueva matriz, ordenados que se pasa como argumento para restablecer. SortingField es la propiedad de cadena del modelo.

+0

Dijo específicamente que no quiere utilizar el restablecimiento. Y ahora lo corrigió: P No es tu culpa. –

+1

Yo soy yo, aunque lol. Lo edité porque, por el momento, esa es la solución en la que puedo pensar. – chenglou

+0

¿Puedes expandir tu respuesta? Estoy tratando con lo mismo y me pregunto dónde especificará qué atributo (título o fecha) ordenar. – CamelBlues

3

Es posible que tenga que mirar the answer here, aquí está la solución aportada en ese puesto:

comparator: function(item) { 
    return [item.get("level"), item.get("title")] 
} 
4

Es posible aplicar de forma más lógica en el comparador, para que pueda abstraer parte de la lógica de clasificación:

var Collection = Backbone.Collection.extend({ 

    model: myModel, 
    order: 'name' 

    comparator: function(model) { 
     if (this.order === 'name') { 
      return model.get('name'); 
     } else { 
      return model.get('date'); //or modify date into a numeric value 
     } 
    } 
}); 

a continuación, cambiar la forma en que desea que ordenan:

myCollection.order = 'date'; 
myCollection.sort(); 

Esto llamará a la función del comparador y lo ordenará de esta manera.

Puede escuchar la reordenación en una vista:

this.listenTo(myCollection,'sort',this.render); 

Esto debido a que el tiene la ventaja añadida de que cada vez que se añade un modelo, que llama el comparador y la ordena utilizando cualquiera que sea su configuración actual es, el método de clasificación se almacena en la colección.

+0

+1 para esta respuesta. Las opciones son cómo pasar información entre su aplicación que necesitan las funciones. – Throttlehead

Cuestiones relacionadas