正如我在Spine.js源代码中看到的那样,Model.each()函数按照ID的顺序返回Model的记录。在订购很重要的情况下,这是完全不可靠的:长人名单等。
您能否建议一种方法来保持原始记录的排序(与它们通过refresh()或类似功能到达的顺序相同)?
P.S。 情况甚至更糟,因为默认情况下Spine.js在内部使用新的GUID作为ID。所以记录顺序是完全随机的,这是不可接受的。
编辑: 似乎在最后一次提交https://github.com/maccman/spine/commit/116b722dd8ea9912b9906db6b70da7948c16948a 他们让它成为可能,但我自己没有测试过,因为我从Spine转到了Knockout。
答案 0 :(得分: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
}
});
然后,在学生控制器中,您可以使用sort:
设置元素/*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)});
},
});
就是这样。