Ich versuche, JSON (aus dem Json_encode von PHP) in eine Backbone JS-Sammlung zu laden. Ich habe das Problem vereinfacht:
var myJSON = '[{ "id":"1","name":"some name","description":"hmmm"}]';
var myCollection = new MyCollection(myJSON, { view: this });
Und:
MyObject = Backbone.Model.extend({
id: null,
name: null,
description: null
});
MyCollection = Backbone.Collection.extend({
model: MyObject,
initialize: function (models,options) { }
});
Error:
Nicht abgerufener TypeError: Der Operator 'in' kann nicht zur Suche nach 'id' in verwendet werden
Ähnliche Ausgabe: Backbone: Sammlung vom Server abrufen
Mein JSON scheint sicherlich im richtigen Format zu sein. Fehlt mir etwas offensichtliches? Ich habe versucht, einfach id: "1" im Gegensatz zu "id" mit dem gleichen Ergebnis zu verwenden.
Ihr JSON ist immer noch im String-Format. Übergeben Sie es an JSON.parse, bevor Sie es zuweisen:
var myJSON = JSON.parse('[{"id":1,"name":"some name","description":"hmmm"}]');
Sie haben den defaults
-Hash in Ihrem Modell vergessen.
MyObject = Backbone.Model.extend({
defaults: {
id: null,
name: null,
description: null
}
});
Siehe die Dokumentation
ich vermisse den Punkt vielleicht komplett, aber die Probleme scheinen die "einfachen Anführungszeichen" um das Array zu sein. Dies ist das:
var myJSON = '[{ "id":"1","name":"some name","description":"hmmm"}]';
sollte sein:
var myJSON = [{ "id":"1","name":"some name","description":"hmmm"}];
Php, afik, fügt die einzelnen Anführungszeichen nicht hinzu, daher sollte es so einfach sein wie das Ändern einer Zeile, die besagt:
$my_js = "var myJSON = '" . json_encode($my_array_to_send)) . "';";
zu:
$my_js = "var myJSON = " . json_encode($my_array_to_send)) . "; ";