From 7511f9d29a94ff372bdb35ef3645552f9c8fc602 Mon Sep 17 00:00:00 2001 From: Max Goodman Date: Mon, 20 May 2013 18:53:35 -0700 Subject: [PATCH] Improve sidebar subreddit list sorting behavior. It turns out Backbone fires the 'sort' event after adding new models to a collection. This allows us to reorder the views in the DOM in one batch rather than having to insert elements into specific offsets in the DOM, which breaks when 'add' events are out of order from the collection. --- r2/r2/public/static/js/multi.js | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/r2/r2/public/static/js/multi.js b/r2/r2/public/static/js/multi.js index 8a5327a88..db0155c82 100644 --- a/r2/r2/public/static/js/multi.js +++ b/r2/r2/public/static/js/multi.js @@ -219,6 +219,7 @@ r.multi.MultiDetails = Backbone.View.extend({ this.listenTo(this.model, 'change', this.render) this.listenTo(this.model.subreddits, 'add', this.addOne) this.listenTo(this.model.subreddits, 'remove', this.removeOne) + this.listenTo(this.model.subreddits, 'sort', this.resort) this.listenTo(this.model.subreddits, 'add remove reset', this.render) new r.ui.ConfirmButton({el: this.$('button.delete')}) @@ -263,17 +264,13 @@ r.multi.MultiDetails = Backbone.View.extend({ bubbleGroup: this.bubbleGroup }) this.itemViews[sr.id] = view + this.$('.subreddits').append(view.render().$el) + }, - var $el = view.render().$el, - index = this.model.subreddits.indexOf(sr), - $list = this.$('.subreddits'), - $cur = $list.children().eq(index) - - if ($cur.length) { - $cur.before($el) - } else { - $list.append($el) - } + resort: function() { + this.model.subreddits.each(function(sr) { + this.itemViews[sr.id].$el.appendTo(this.$('.subreddits')) + }, this) }, removeOne: function(sr) {