2011-08-24 8 views
5

Como puedo ver en las fuentes de Spine.js, la función Model.each() devuelve los registros de Model en el orden de sus ID. Esto es completamente poco confiable en escenarios donde el orden es importante: larga lista de personas, etc.Solicitud de registros de modelo en Spine.js

¿Puede sugerir una manera de mantener el orden de los registros originales (en el mismo orden en que llegaron mediante la actualización() o funciones similares)?

P.S. Las cosas son incluso peores porque, de forma predeterminada, Spine.js usa internamente GUID nuevos como ID. Entonces el orden de los registros es completamente aleatorio, lo cual es inaceptable.

EDIT: parece que en el pasado se comprometen https://github.com/maccman/spine/commit/116b722dd8ea9912b9906db6b70da7948c16948a
que hicieron posible, pero no he probado a mí mismo porque he pasado de la columna vertebral a octavos de final.

+0

por ahora lo descubrí usando Array.sort de JavaScript() – irium

+0

http://groups.google.com/group/spinejs/browse_thread/thread/857e463e93f5bf2c – abernier

Respuesta

2

Se topó con el mismo problema aprendiendo spine.js. Estoy usando JS puro, así que estaba descuidando el ejemplo de contacto http://spinejs.com/docs/example_contacts que me ayudó en este caso. De hecho, no puedes mantener el orden del servidor de esta manera, pero puedes hacer tu propio pedido con javascript.

Observe que estoy usando el Element Pattern aquí. (Http://spinejs.com/docs/controller_patterns)

Primero se establece la función que va a realizar la ordenación está dentro del modelo:

/*Extending the Student Model*/ 
Student.extend({ 

    nameSort: function(a,b) { 
     if ((a.name || a.email) > (b.name || b.email)) 
      return 1; 
     else 
      return -1 
    } 
}); 

Luego, en el controlador de estudiantes de configurar los elementos que utilizan el tipo:

/*Controller that manages the students*/ 
var Students = Spine.Controller.sub({ 

      /*code ommited for simplicity*/ 

      addOne: function(student){ 
      var item = new StudentItem({item: student}); 
      this.append(item.render()); 
    }, 

    addAll: function(){ 
      var sortedByName = Student.all().sort(Student.nameSort); 
      var _self = this; 
      $.each(sortedByName, function(){_self.addOne(this)}); 
    }, 


}); 

Y eso es todo.

Cuestiones relacionadas