2011-08-24 67 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)}); 
    }, 


}); 

而就是这样。