2011-08-24 2 views
5

Come posso vedere nei sorgenti Spine.js la funzione Model.each() restituisce i record di Model nell'ordine dei loro ID. Questo è completamente inaffidabile negli scenari in cui l'ordine è importante: elenco di persone lunghe ecc.Ordinamento dei record di modello in Spine.js

Puoi suggerire un modo per mantenere l'ordine dei record originali (nello stesso ordine in cui sono arrivati ​​tramite refresh() o funzioni simili)?

P.S. Le cose sono anche peggiori perché per impostazione predefinita Spine.js utilizza internamente nuovi GUID come ID. Quindi l'ordine dei record è completamente casuale e inaccettabile.

EDIT: sembra che in ultima commettono https://github.com/maccman/spine/commit/116b722dd8ea9912b9906db6b70da7948c16948a
hanno reso possibile, ma non l'ho testato io stesso perché sono passato da Spina a eliminazione diretta.

+0

per ora l'ho capito utilizzando l'Array.sort() di JavaScript – irium

+0

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

risposta

2

Bumped nello stesso problema di apprendimento spine.js. Sto usando JS puro, quindi trascuravo l'esempio di contatto http://spinejs.com/docs/example_contacts che ha dato una mano su questo. In effetti, non è possibile mantenere l'ordine dal server in questo modo, ma è possibile eseguire l'ordine con javascript.

Si noti che sto utilizzando il modello di elemento qui. (Http://spinejs.com/docs/controller_patterns)

Per prima cosa impostare la funzione che intenzione è fare la cernita all'interno del modello:

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

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

Poi, nel regolatore studenti di impostare gli elementi che utilizzano il 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)}); 
    }, 


}); 

E questo è tutto.