Anton Shestakov <av6@dwimlabs.net>, Mon, 05 Sep 2016 22:56:08 +0800
docs: update What's New for 0.4.2
static/js/backbone.shard.js
Permissions: -rw-r--r--
* (c) 2013, 2016 Anton Shestakov. * This extension to Backbone may be freely distributed * https://opensource.org/licenses/MIT Backbone.Shard = function(options) { this._collection = options.collection; this._filter = options.filter; this.models = this._collection.filter(this._filter); .on('all', function(event, model) { if (this._filter(model) && _(this.models).contains(model)) { this.trigger.apply(this, arguments); if (this._filter(model) && !_(this.models).contains(model)) { this.trigger('add', model); if (!this._filter(model) && _(this.models).contains(model)) { this.models = _.without(this.models, model); this.trigger('remove', model); } else if (/^change:/.test(event) && this._filter(model) && _(this.models).contains(model)) { this.trigger.apply(this, arguments); .on('add', function(model) { if (this._filter(model) && !_(this.models).contains(model)) { this.trigger('add', model); .on('remove', function(model) { if (this._filter(model) && _(this.models).contains(model)) { this.models = _.without(this.models, model); this.trigger('remove', model); .on('reset', function() { this.models = this._collection.filter(this._filter); this.initialize.apply(this, arguments); _.extend(Backbone.Shard.prototype, Backbone.Events, { initialize: function() {}, return _.map(this.models, function(model) { return model.get(attr); }); // Underscore methods that we want to implement on the Shard. 'all', 'any', 'chain', 'collect', 'contains', 'detect', 'difference', 'drop', 'each', 'every', 'filter', 'find', 'findIndex', 'findLastIndex', 'first', 'foldl', 'foldr', 'forEach', 'head', 'include', 'includes', 'indexOf', 'initial', 'inject', 'invoke', 'isEmpty', 'last', 'lastIndexOf', 'map', 'max', 'min', 'reduce', 'reduceRight', 'reject', 'rest', 'sample', 'select', 'shuffle', 'size', 'some', 'tail', 'take', 'toArray', 'without' // Mix in each Underscore method as a proxy to `Shard#models`. _.each(methods, function(method) { Backbone.Shard.prototype[method] = function() { var args = Array.prototype.slice.call(arguments); args.unshift(this.models); return _[method].apply(_, args); // Underscore methods that take a property name as an argument. var attributeMethods = ['countBy', 'groupBy', 'indexBy', 'sortBy']; // Use attributes instead of properties. _.each(attributeMethods, function(method) { Backbone.Shard.prototype[method] = function(value, context) { var iterator = _.isFunction(value) ? value : function(model) { return _[method](this.models, iterator, context);