web-dev-qa-db-de.com

Rückgrat: Erstellen Sie eine Sammlung aus JSON

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.

16
pws5068

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"}]');
13
kinakuta

Sie haben den defaults-Hash in Ihrem Modell vergessen.

MyObject = Backbone.Model.extend({
  defaults: {
    id: null,
    name: null,
    description: null
  }
});

Siehe die Dokumentation

3
Paul

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)) . ";  ";
0
ErichBSchulz