Frage

Mit Backbone.js versuchen Sie, ein einfaches Get () auf einer Sammlung nach dem Abholen von Elementen vom Server zu machen.

Fetch scheint gut zu funktionieren. Wenn ich jedoch versuche, einen Artikel per ID aus der Sammlung zu erhalten, erhalte ich das unerwartete Ergebnis von undefiniert anstelle eines Modells.

Hier ist mein Backbone -Element -Code:

  Model.Scenario = Backbone.Model.extend({

    defaults: function() {
      return {
        title: 'Scenario',
        answer: null,
      };
    }

  });

  Collection.Scenarios = Backbone.Collection.extend({

    model: Model.Scenario,

    url: "data.php",


  });

Dann die OBJ -Kreation/das Fetch mit einer Router -Methode:

 var Router = new (Backbone.Router.extend({

    routes: {
      ":id"    : "page",
      "" : "page"
    },

    initialize: function() {
      _.bindAll(this, 'page');
      this.scenarios = new Collection.Scenarios();
      this.scenarios.fetch();
      console.log(this.scenarios);
      console.log(this.scenarios.get(1));
      console.log(this.scenarios.get(2));

      Backbone.history.start();
    },

  }))();

Schließlich ist hier das, was beim Debugger angemeldet ist (damit Sie sehen, dass die Sammlung besiedelt wird):

child
  _byCid: Object
  _byId: Object
    1: child
    2: child
    3: child
    4: child
    7: child
    10: child
    11: child
    12: child
    13: child
    14: child
    15: child
    16: child
    17: child
    18: child
    19: child
    20: child
    21: child
    22: child
    23: child
    26: child
    27: child
    28: child
  __proto__: Object
  length: 22
  models: Array[22]
  __proto__: ctor

 undefined  //first call to get(id)
 undefined  //2nd call to get(id)

Ich bin ratlos. Entschuldigung für den langen Beitrag, würde aber über jede Einsicht darüber schätzen, was mir fehlt. Vielen Dank.

War es hilfreich?

Lösung

Mein erster Gedanke ist, dass der Fetch () nicht zurückgekehrt ist, wenn Sie Ihr .get () tun.

Aber wenn das, was Sie gepostet haben, genau das ist, was passiert, wird die erste Konsole (this.scenarios) angezeigt, die geladen wird.

Auf jeden Fall möchten Sie versuchen, die Konsole in den Erfolg zu bringen: Ereignis des Abrufs, nur um sicherzustellen, dass dies nicht das Problem ist.

Mein zweiter Gedanke ist, dass die ID für die Modelle nicht richtig eingestellt wird.

Backbone.model standardmäßig verwendet die Eigenschaft "ID" als ID für ein Modell, Collection.get (ID) gibt das Modell mit der ID zurück, die Sie übergeben haben.

Hat die Antwort von Data.php eine ID -Eigenschaft?

Versuchen Sie es stattdessen:

 var Router = new (Backbone.Router.extend({

    routes: {
      ":id"    : "page",
      "" : "page"
    },

    initialize: function() {
      _.bindAll(this, 'page');
      this.scenarios = new Collection.Scenarios();
      this.scenarios.fetch({
        success: function(coll, resp) {
          console.log(coll);
          console.log(coll.first());
          console.log(coll.last());
        });
      Backbone.history.start();
    },

  }))();

Das sollte das erste und letzte Modell zurückgeben und das ID -Problem aus dem Bild herausnehmen.

Wenn das funktioniert, was zeigen die Modelle für die ID -Eigenschaft (Coll.First (). ID)?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top