我有一个简单的消息集合,我想使用比较器
按时间反向排序(最新的在顶部):
...
this.comparator = function(message) {
var time = new Date(message.get("time")).getTime();
return time;
}
...
在我看来,我使用 fetch
和 add
事件:
messages = new MessageCollection();
messages.fetch({update: true});
messages.on("add", this.appendMessage);
...
appendMessage: function(message) {
var messageView = new MessageView({
model: message
});
this.$el.prepend(messageView.render().el);
}
遗憾的是,消息不是按照我正在寻找的顺序呈现的,而是按照它们来自服务器的原始顺序呈现的。
现在,经过一些测试,我发现当我一次添加所有消息(使用 reset
)时,顺序符合我的预期。
messages.fetch();
messages.on("reset", this.appendCollection);
...
appendCollection: function(messages) {
messages.each(function(message) {
this.appendMessage(message);
}, this);
}
尽管我可以理解这个过程,因为集合可能只能在添加所有模型后弄清楚它应该如何排序,但这(on("add")
配置)用于在 Backbone 0.9.2 中工作。
我错过了什么吗?比较器方法或与 add
有关的事件模型是否发生变化?或者我的做法是错误的?谢谢!
最佳答案
当您在集合中添加模型时,您会调用appendMessage
方法。 appendMessage
是按照添加模型的顺序调用的,而不是集合中的实际顺序。
关于javascript - 使用比较器的集合排序仅在获取完成后才起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15023130/