C'est un exemple grave, mais je crois que cela devient le point de vue.
Permet de dire que j'ai une collection de voitures à colonne vertébrale. Et pour la collection, je veux une propriété appelée Isvalid. Je veux que d'autres objets puissent être liés à Isvalid et à déclencher une fonction lorsque cela change d'ISVALID. La propriété Collection Isvalid sera modifiée en fonction des modèles d'une collection dans son ensemble. p>
Par exemple, si toutes les portes sont verrouillées sur chaque voiture, les ISVALID devraient changer de vrai. Lorsque des modifications ISVALID, toutes les fonctions liées à l'événement de changement iSValid doivent être tirées. P>
Ma question est, comment puis-je créer une collection qui contient des propriétés liées qui fonctionne comme des propriétés modèles? P> < P> C'est le code que je voudrais faire fonctionner. p> p>
Mise à jour p> Voir ma solution complète comme une réponse ci-dessous. P> p>
3 Réponses :
Il n'y a donc pas de moyen «intégré» de répondre aux changements de propriété sur une collection, car il n'y a vraiment pas de manière prise en charge (que je connaisse) d'avoir des propriétés sur une collection. Cependant, c'est toujours totalement possible comme ça, je pense. (non testé, mais devrait être assez proche) une note: vous ne voulez pas ISVALID: répertorié comme une propriété comme si vous voulez modéliser ou URL. Cela semble faire du colonne vertébrale être bizarre et que votre Isvalid pourrait couvrir toutes les instances de la collection. Il est préférable de les définir comme une initialiseur, alors chaque fois que vous instanciez cette collection, vous aurez dûment une instance d'ISVALID accessible par cela.isvalid. P> P>
Merci d'avoir répondu. Je crois que vous m'avez signalé dans la bonne direction. Appréciez les informations que cela devrait être créé dans l'initialisation. Quand je suis fini avec ma solution de travail, je le posterai.
Voici ma solution complète à cette question: jsfiddle Exemple complet
@spotmat m'a mis dans la bonne direction, mais je devais ajouter des fonctionnalités supplémentaires . Voici quelques articles qui devaient être résolus: p>
Je ne sais pas si l'ajout de propriétés de liaison à une collection est une excellente idée, mais est quelque chose d'amusant de comprendre, et j'ai appris beaucoup. P>
var logger = new Logger(); log.bind("log", function(message){ console.log(message[0]); }); var carsData = [ { "Model": "Chevy Camero", "Year": 1982, "IsLocked": true }, { "Model": "Ford F-150", "Year": 2011, "IsLocked": false } ] var cars = new Cars(carsData); cars.bind("change:isValid", function(isValid){ log.trigger("log", ["change:isValid: " + isValid]); }); cars.add({ "Model": "Toyota Tacoma", "Year": 2006, "IsLocked": true }); cars.at(1).set({ "IsLocked": true });
Vous pouvez utiliser quelque chose comme ceci;
var Cars = Backbone.Collection.extend({ model: Car, url: "Cars", initialize: function () { this.bindableProperty('isValid', false); } });
Je vais essayer ceci ce soir.
Merci Stephen Belanger pour vous répondre. La solution que vous fournissez est probablement la plus propre, mais comme vous l'avez mentionnée, elle ne fonctionne pas avec IE8. Même si je devais écrire un peu plus de code pour obtenir mon exemple de travailler avec votre recommandation, je n'ai plus besoin d'appeler manuellement le code suivant, ce qui est très agréable: voitures.trigger ("modifier: isvalid", [ this.isvalid]) code> Maintenant, chaque fois que la propriété ISVALID est modifiée, l'événement est tiré automatiquement. exemple Jsfiddle
Juste pour quiconque pourrait lire ceci à l'avenir; Il fonctionne dans IE9 + et partiellement dans IE8, comme expliqué ici; développeur.mozilla.org/fr/javaScript/reference/ Global_Objects / ...