'use strict'; define(['app', 'signalR'], function () { _.extend(Backbone.Collection.prototype, {BindSignalR: function (options) { if (!options || !options.url) { console.assert(this.url, 'url must be provided or collection must have url'); options = { url: this.url.replace('api', 'signalr') }; } var self = this; var _getStatus = function (status) { switch (status) { case 0: return 'connecting'; case 1: return 'connected'; case 2: return 'reconnecting'; case 4: return 'disconnected'; default: throw 'invalid status ' + status; } }; var connection = $.connection(options.url); connection.stateChanged(function (change) { console.debug('{0} [{1}]'.format(options.url, _getStatus(change.newState))); }); connection.received(function (model) { console.debug(model); self.fetch(); }); connection.start({ transport: ['longPolling'] }); return this; }}); });