2011-08-24 69 views
5

正如我在Spine.js資源中看到的那樣,Model.each()函數按其ID的順序返回模型記錄。在訂購很重要的情況下,這是完全不可靠的:長時間的人員列表等。Spine.js中的模型記錄排序

您能否提出一種保持原始記錄排序的方法(與它們通過refresh()或類似的函數以相同的順序)?

P.S. 事情更糟,因爲默認情況下Spine.js內部使用新的GUID作爲ID。所以記錄順序是完全隨機的,這是不可接受的。

編輯: 看來,在最後提交https://github.com/maccman/spine/commit/116b722dd8ea9912b9906db6b70da7948c16948a
他們使人們有可能的,但因爲我是從脊柱切換到淘汰賽我還沒有測試它自己。

+0

現在我想通過使用JavaScript的Array.sort() – irium

+0

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

回答

2

碰到同樣的問題學習spine.js。我使用純JS,所以我忽略了這個幫助的聯繫示例http://spinejs.com/docs/example_contacts。事實上,您無法通過這種方式真正保持服務器的排序,但是您可以使用javascript自行完成訂購。

請注意,我在這裏使用元素圖案。 (http://spinejs.com/docs/controller_patterns)

首先你設置這該怎麼辦模型內部排序功能:

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

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

然後,在學生控制器設置使用的元素排序:

/*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)}); 
    }, 


}); 

而就是這樣。