diff --git a/app/assets/javascripts/discourse/models/nav-item.js.es6 b/app/assets/javascripts/discourse/models/nav-item.js.es6 index 6bc7ebc3d61..03cc8145c80 100644 --- a/app/assets/javascripts/discourse/models/nav-item.js.es6 +++ b/app/assets/javascripts/discourse/models/nav-item.js.es6 @@ -80,8 +80,9 @@ const NavItem = Discourse.Model.extend({ } }, - @computed("topicTrackingState", "name", "category") - count(state, name, category) { + @computed("name", "category", "topicTrackingState.messageCount") + count(name, category) { + const state = this.get("topicTrackingState"); if (state) { return state.lookupCount(name, category); } diff --git a/app/assets/javascripts/discourse/models/topic-tracking-state.js.es6 b/app/assets/javascripts/discourse/models/topic-tracking-state.js.es6 index 16513b74b10..d4c3a0354a3 100644 --- a/app/assets/javascripts/discourse/models/topic-tracking-state.js.es6 +++ b/app/assets/javascripts/discourse/models/topic-tracking-state.js.es6 @@ -179,8 +179,7 @@ const TopicTrackingState = Discourse.Model.extend({ delete this.states["t" + topic_id]; }, - // If we have a cached topic list, we can update it from our tracking - // information. + // If we have a cached topic list, we can update it from our tracking information. updateTopics(topics) { if (Em.isEmpty(topics)) { return; } @@ -283,7 +282,7 @@ const TopicTrackingState = Discourse.Model.extend({ }, incrementMessageCount() { - this.set("messageCount", this.get("messageCount") + 1); + this.incrementProperty("messageCount"); }, countNew(category_id) { @@ -358,8 +357,7 @@ const TopicTrackingState = Discourse.Model.extend({ const states = this.states; const idMap = Discourse.Category.idMap(); - // I am taking some shortcuts here to avoid 500 gets for - // a large list + // I am taking some shortcuts here to avoid 500 gets for a large list if (data) { _.each(data,topic => { var category = idMap[topic.category_id]; diff --git a/test/javascripts/models/nav-item-test.js.es6 b/test/javascripts/models/nav-item-test.js.es6 index 15b75bc0dc6..38174eb639b 100644 --- a/test/javascripts/models/nav-item-test.js.es6 +++ b/test/javascripts/models/nav-item-test.js.es6 @@ -1,3 +1,5 @@ +import createStore from 'helpers/create-store'; + QUnit.module("Discourse.NavItem", { beforeEach() { Ember.run(function() { @@ -19,3 +21,15 @@ QUnit.test('href', assert =>{ href('category/bug', '/c/bug', 'English category name'); href('category/确实是这样', '/c/343434-category', 'Chinese category name'); }); + +QUnit.test("count", assert => { + const navItem = createStore().createRecord("nav-item", { name: "new" }); + + assert.equal(navItem.get("count"), 0, "it has no count by default"); + + const tracker = navItem.get("topicTrackingState"); + tracker.states["t1"] = { topic_id: 1, last_read_post_number: null }; + tracker.incrementMessageCount(); + + assert.equal(navItem.get("count"), 1, "it updates when a new message arrives"); +});