You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.3 KiB
46 lines
1.3 KiB
var vent = require('vent');
|
|
var _ = require('underscore');
|
|
var Backbone = require('backbone');
|
|
|
|
require('signalR');
|
|
|
|
module.exports = _.extend(Backbone.Collection.prototype, {
|
|
bindSignalR : function(bindOptions) {
|
|
|
|
var collection = this;
|
|
bindOptions = bindOptions || {};
|
|
|
|
var processMessage = function(options) {
|
|
if (options.action === 'sync') {
|
|
console.log('sync received, re-fetching collection');
|
|
collection.fetch();
|
|
|
|
return;
|
|
}
|
|
|
|
if (options.action === 'deleted') {
|
|
collection.remove(new collection.model(options.resource, { parse : true }));
|
|
|
|
return;
|
|
}
|
|
|
|
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,
|
|
changeSource : 'signalr'
|
|
});
|
|
|
|
console.log(options.action + ': {0}}'.format(options.resource));
|
|
};
|
|
|
|
collection.listenTo(vent, 'server:' + collection.url.split('/api/')[1], processMessage);
|
|
|
|
return this;
|
|
}
|
|
}); |