我有一个简单的消息集合,我想按时反向排序(最新的在顶部),使用comparator
:
...
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
?还是我走错路了?谢谢!