From 701843552aecb08d5a3ecd41fbe5e9e263ab9381 Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Fri, 2 Aug 2013 15:14:24 -0400 Subject: [PATCH] Fixes to {{#groupedEach}} --- .../discourse/helpers/grouped_each.js | 21 +++++++++++++++-- .../topic_summary/info.js.handlebars | 21 +++++++++-------- .../private_message.js.handlebars | 8 +++---- .../templates/user/stream.js.handlebars | 23 +++++++++++++++++++ .../templates/user/stream_item.js.handlebars | 21 ----------------- .../discourse/views/replies_view.js | 4 ++-- .../views/topic_summary/topic_summary_view.js | 15 ++++++------ .../discourse/views/user/user_stream_view.js | 8 +------ 8 files changed, 68 insertions(+), 53 deletions(-) create mode 100644 app/assets/javascripts/discourse/templates/user/stream.js.handlebars delete mode 100644 app/assets/javascripts/discourse/templates/user/stream_item.js.handlebars diff --git a/app/assets/javascripts/discourse/helpers/grouped_each.js b/app/assets/javascripts/discourse/helpers/grouped_each.js index d59409117e..f0632acae8 100644 --- a/app/assets/javascripts/discourse/helpers/grouped_each.js +++ b/app/assets/javascripts/discourse/helpers/grouped_each.js @@ -10,6 +10,7 @@ var DiscourseGroupedEach = function(context, path, options) { this.normalizedRoot = normalized.root; this.normalizedPath = normalized.path; this.content = this.lookupContent(); + this.destroyed = false; this.addContentObservers(); this.addArrayObservers(); @@ -41,6 +42,8 @@ DiscourseGroupedEach.prototype = { }, addArrayObservers: function() { + if (!this.content) { return; } + this.content.addArrayObserver(this, { willChange: 'contentArrayWillChange', didChange: 'contentArrayDidChange' @@ -48,6 +51,8 @@ DiscourseGroupedEach.prototype = { }, removeArrayObservers: function() { + if (!this.content) { return; } + this.content.removeArrayObserver(this, { willChange: 'contentArrayWillChange', didChange: 'contentArrayDidChange' @@ -65,6 +70,8 @@ DiscourseGroupedEach.prototype = { }, render: function() { + if (!this.content) { return; } + var content = this.content, contentLength = Em.get(content, 'length'), data = this.options.data, @@ -72,18 +79,28 @@ DiscourseGroupedEach.prototype = { data.insideEach = true; data.insideGroup = true; + for (var i = 0; i < contentLength; i++) { template(content.objectAt(i), { data: data }); } }, rerenderContainingView: function() { - Ember.run.scheduleOnce('render', this.containingView, 'rerender'); + var self = this; + Ember.run.scheduleOnce('render', this, function() { + // It's possible it's been destroyed after we enqueued a re-render call. + if (!self.destroyed) { + self.containingView.rerender(); + } + }); }, destroy: function() { this.removeContentObservers(); - this.removeArrayObservers(); + if (this.content) { + this.removeArrayObservers(); + } + this.destroyed = true; } }; diff --git a/app/assets/javascripts/discourse/templates/topic_summary/info.js.handlebars b/app/assets/javascripts/discourse/templates/topic_summary/info.js.handlebars index f6378b9619..49919e6030 100644 --- a/app/assets/javascripts/discourse/templates/topic_summary/info.js.handlebars +++ b/app/assets/javascripts/discourse/templates/topic_summary/info.js.handlebars @@ -10,7 +10,6 @@ {{/if}} - {{#if summaryCollapsed}}