Pourquoi ne puis-je pas utiliser Backbone.Collection comme une collection générique? Existe-t-il une mise en œuvre qui fait cela?

Après avoir posé cette question et j'ai réalisé que Backbone.Collection s est strictement pour Backbone.Models , je suis un peu déçu.

Ce que j'espérais:

Mettre les méthodes de soulignement plus orientées vers l'objet:

 _.invoke(myCollection, 'method'); ==> myCollection.invoke('method'); 

J'avouerai, petite différence, mais cela semble toujours agréable.

Quels problèmes rencontrerai-je si j'utilise Backbone.Collection pour les modèles Backbone.Models ?

Existe-t-il des implémentations existantes, ou un moyen simple de créer une classe de collection de soulignement générique?

Alors que vous ne pouvez pas utiliser une collection Backbone sans utiliser de modèles, je suis venu avec une manière intelligente de mélanger le trait de soulignement dans le prototype Array:

 // This self-executing function pulls all the functions in the _ object and sticks them // into the Array.prototype (function () { var mapUnderscoreProperty = function (prp) { // This is a new function that uses underscore on the current array object Array.prototype[prp] = function () { // It builds an argument array to call with here var argumentsArray = [this]; for (var i = 0; i < arguments.length; ++i) { argumentsArray.push(arguments[i]); } // Important to note: This strips the ability to rebind the context // of the underscore call return _[prp].apply(undefined, argumentsArray); }; }; // Loops over all properties in _, and adds the functions to the Array prototype for (var prop in _) { if (_.isFunction(_[prop])) { mapUnderscoreProperty(prop); } } })(); 

Voici un exemple de la façon d'utiliser les nouveaux prototypes Array:

 var test = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log(test.filter(function (item) { return item > 2 && item < 7; })); // Logs [3, 4, 5, 6] console.log(test); // Logs the entire array unchanged 

Cette solution pourrait ajouter plus au prototype Array que ce qui est réellement utile, mais cela vous permet d'obtenir la majeure partie des fonctions. Une autre solution serait d'ajouter uniquement des fonctions qui ont un argument itérateur, mais c'est un début pour vous.