Wenn ich versuche, eine Sammlung aus einer Werteliste aufzufüllen, erhalte ich einen Fehler, weil% code% der Sammlung model
nicht definiert ist. Beim Betrachten dieser Frage zu einem ähnlichen Problem habe ich überprüft, dass das Modell tatsächlich vor erstellt wurde Die Sammlung wird nach besten Kräften instanziert.
Der Fehler wird in einem der Event-Handler der Marionette CompositeView, die die Collection enthält, ausgelöst, nachdem die Daten vom Server abgerufen wurden und versucht wurde, die Sammlung mit der Liste der Werte aus den Daten zu füllen, die aufgefüllt werden sollten hinein.
Hinweis: Verwenden von Backbone 0.9.10
Das Modell
%Vor%Die Sammlung
%Vor%Der entsprechende Code von CompositeView
%Vor%Der Fehler
Der Fehler tritt in der Funktion prototype
im Backbone auf, wenn Sie für das Modellobjekt eine reset
ausführen, um zu prüfen, ob es sich um ein Duplikat handelt. Der fehlerhafte Code ist hier:
Hier schlägt die add
fehl, weil die get
für das Modell nicht definiert ist.
Warum passiert das und wie kann es behoben werden?
Vielen Dank!
Der Grund dafür ist, dass Sie in Babkbone 0.9.10, wenn Sie collection.reset(models)
ohne Optionen aufrufen, die Modelle an collection.add()
übergeben, die streng reelle Modelle als Argument benötigen.
Aber tatsächlich sind die Argumente, die Sie bestanden haben, keine wirklichen Modelle. Sie sind nur ein Array von Hash-Attributen.
Zwei Optionen zum Reparieren:
Dann analysiert reset
das Array von Hashes und setzt sie als Modell.
Hier übernimmt reset()
nicht länger die Verantwortung für add()
, sondern verwendet set()
smart. Diese Option wird empfohlen. Und Sie brauchen keine Optionen hier.
Darf ich vorschlagen, dass Sie model
in CompositeView nicht definieren? CompositeView ist für die Sammlung, nicht für das Modell. Natürlich verstehe ich, dass das Modell hier nur dazu dient, einige Daten zu halten und abzurufen, aber es wäre wirklich verwirrend, wenn der Code von einem anderen Entwickler gelesen würde, ebenso wie die eigene Pflege.
Um Bootstrapped-Daten zu erhalten, können Sie die Daten auf erste Anfrage laden und auf herkömmliche Weise in die Sammlung übernehmen. Ссылка
Tags und Links javascript backbone.js marionette prototype undefined