diff --git a/apps/comments/js/commentstabview.js b/apps/comments/js/commentstabview.js index a8966749cf..b3e17653f5 100644 --- a/apps/comments/js/commentstabview.js +++ b/apps/comments/js/commentstabview.js @@ -270,23 +270,30 @@ * @private */ _onAddModel: function(model, collection, options) { - var self = this; + // we need to render it immediately, to ensure that the right + // order of comments is kept on opening comments tab + var $comment = $(this.commentTemplate(this._formatItem(model))); + if (!_.isUndefined(options.at) && collection.length > 1) { + this.$container.find('li').eq(options.at).before($comment); + } else { + this.$container.append($comment); + } + this._postRenderItem($comment); + $('#commentsTabView').find('.newCommentForm div.message').text('').prop('disabled', false); + // we need to update the model, because it consists of client data // only, but the server might add meta data, e.g. about mentions + var oldMentions = model.get('mentions'); + var self = this; model.fetch({ success: function (model) { - var $el = $(self.commentTemplate(self._formatItem(model))); - if (!_.isUndefined(options.at) && collection.length > 1) { - self.$container.find('li').eq(options.at).before($el); - } else { - self.$container.append($el); + if(_.isEqual(oldMentions, model.get('mentions'))) { + // don't attempt to render if unnecessary, avoids flickering + return; } - - self._postRenderItem($el); - $('#commentsTabView').find('.newCommentForm div.message').text('').prop('disabled', false); - }, - error: function () { - self._onSubmitError($('#commentsTabView').find('.newCommentForm'), undefined); + var $updated = $(self.commentTemplate(self._formatItem(model))); + $comment.html($updated.html()); + self._postRenderItem($comment); } }) @@ -312,7 +319,6 @@ // ignore noise – this is only set after editing a comment and hitting post return; } - var self = this; // we need to update the model, because it consists of client data