From 9142d1b188efdf262500d342e84f31aae8eb38cb Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sat, 30 Nov 2013 11:40:44 -0800 Subject: [PATCH] Option to prevent backbone from adding new models to a collection (update only) Prevents upcoming/calendar from blowing up when --- src/UI/Calendar/CalendarView.js | 2 +- src/UI/Calendar/UpcomingCollectionView.js | 8 +------- src/UI/Calendar/UpcomingItemView.js | 2 ++ src/UI/Mixins/backbone.signalr.mixin.js | 9 ++++++++- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/UI/Calendar/CalendarView.js b/src/UI/Calendar/CalendarView.js index 6be5259d0..471c64ea1 100644 --- a/src/UI/Calendar/CalendarView.js +++ b/src/UI/Calendar/CalendarView.js @@ -16,7 +16,7 @@ define( return Marionette.ItemView.extend({ initialize: function () { - this.collection = new CalendarCollection().bindSignalR(); + this.collection = new CalendarCollection().bindSignalR({ updateOnly: true }); this.listenTo(this.collection, 'change', this._reloadCalendarEvents); }, render : function () { diff --git a/src/UI/Calendar/UpcomingCollectionView.js b/src/UI/Calendar/UpcomingCollectionView.js index 642e56d61..f5f415a5c 100644 --- a/src/UI/Calendar/UpcomingCollectionView.js +++ b/src/UI/Calendar/UpcomingCollectionView.js @@ -11,14 +11,8 @@ define( itemView: UpcomingItemView, initialize: function () { - this.collection = new UpcomingCollection().bindSignalR(); + this.collection = new UpcomingCollection().bindSignalR({ updateOnly: true }); this.collection.fetch(); - - this.listenTo(this.collection, 'change', this._refresh); - }, - - _refresh: function () { - this.render(); } }); }); diff --git a/src/UI/Calendar/UpcomingItemView.js b/src/UI/Calendar/UpcomingItemView.js index 3117f207c..dcfc64562 100644 --- a/src/UI/Calendar/UpcomingItemView.js +++ b/src/UI/Calendar/UpcomingItemView.js @@ -22,6 +22,8 @@ define( this.model.set({ end: end.toISOString() }); + + this.listenTo(this.model, 'change', this.render); }, _showEpisodeDetails: function () { diff --git a/src/UI/Mixins/backbone.signalr.mixin.js b/src/UI/Mixins/backbone.signalr.mixin.js index 80817cf03..04b1dfd7f 100644 --- a/src/UI/Mixins/backbone.signalr.mixin.js +++ b/src/UI/Mixins/backbone.signalr.mixin.js @@ -8,9 +8,10 @@ define( ], function (vent, _, Backbone) { _.extend(Backbone.Collection.prototype, { - bindSignalR: function () { + bindSignalR: function (bindOptions) { var collection = this; + bindOptions = bindOptions || {}; var processMessage = function (options) { @@ -22,6 +23,12 @@ define( } var model = new collection.model(options.resource, {parse: true}); + + //updateOnly will prevent the collection from adding a new item + if (bindOptions.updateOnly && !collection.get(model.get('id'))) { + return; + } + collection.add(model, {merge: true}); console.log(options.action + ': {0}}'.format(options.resource)); };