Das ist eigentlich eine Antwort, keine Frage. Backbone.js wird oft benutzt. Habe ein kleines, fieses Tier getroffen, aber ich habe online keine Erklärung für meinen speziellen Fall gefunden. Hoffentlich wird dies jemand anderen Zeit sparen.
Symptom
Der Aufruf von fetch () für ein Modell, das aus einer Sammlung gezogen wurde, führt zu einem Backbone-Fehler: "Eine 'URL'-Eigenschaft oder -Funktion muss angegeben werden", obwohl sowohl Sammlung als auch Modell sync () außer Kraft setzen
Erholung
%Vor%Resultierender Backbone-Fehler: "Eine 'URL' Eigenschaft oder Funktion muss angegeben werden"
Fehlgeleitete Untersuchung
Nach einigem Debuggen und Nachforschen, einschließlich der Betrachtung des Backbone.js-Codes, war klar, dass Backbone nach der URL-Eigenschaft auf dem Personenmodell suchte und sie nicht finden konnte. Allerdings übersteuert mein Personenmodell sync () und wenn ein Modell die Synchronisierung überschreibt (), verlangt Backbone nicht, dass das Modell eine URL-Eigenschaft / Methode bereitstellt.
Ich bemerkte auch eine Anomalie: Die Modelle in der Sammlung wurden nie instanziiert.
All meine anderen Sachen, die auf genau demselben Muster basieren, haben lange gut funktioniert.
Was ist zu tun?
Grundursache
Die Hauptursache stellte sich heraus, dass ich in meiner Moduldefinition (AppPax) die Definition von Person nach der Definition von Personen (aufgrund meiner jetzt nicht so nützlichen Gewohnheit, den Code alphabetisch zu sortieren) gesetzt hatte.
Als Backbone auf meine Anfrage hin eine Instanz von People erstellt hat, wusste es anscheinend nichts von AppPax.Person, so dass es basierend auf den von c.fetch () zurückgegebenen Modelleigenschaften eine eigene Version von Person erstellte - ohne mein Bestes Zeug darin, einschließlich meiner sync () -Methode.
Also, als ich versuchte, person.fetch () zu verwenden, benutzte es seine eigene, minimalistische Person-Definition, nicht meine, und diese Definition hatte keine sync () -Methode, also suchte sie nach einer URL-Eigenschaft / Methode auf Person, didn ' Ich finde es ... erstickt.
Also habe ich AppPax.Person vor AppPax.People definiert und alles hat gut funktioniert.
Tags und Links javascript backbone.js