Question

En utilisant Backbone.js, en essayant de faire un get simple () sur une collection après l'extraction des éléments du serveur.

Fetch semble fonctionner très bien. Cependant, lorsque je tente d'obtenir un article par id de la collection, je reçois le résultat inattendu de non défini, au lieu d'un modèle.

Voici mon épine dorsale code éléments:

  Model.Scenario = Backbone.Model.extend({

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

  });

  Collection.Scenarios = Backbone.Collection.extend({

    model: Model.Scenario,

    url: "data.php",


  });

Alors la création obj / fetch w / dans une méthode de routeur:

 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();
    },

  }))();

Enfin, voici ce qui est connecté au débogueur (vous pouvez voir la collection est peuplée):

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)

Je suis perplexe. Désolé pour le long post, mais apprécierait une idée sur ce que je suis absent. Merci.

Était-ce utile?

La solution

Ma première pensée est que le fetch () n'a pas retourné au moment où vous faites votre .get ().

Mais, si ce que vous avez publié est exactement ce qui se passe, la première console.log (this.scenarios) montre que est chargé.

En tout cas, vous pouvez essayer de mettre les console.logs dans le succès: cas de récupération, juste pour vous assurer que n'est pas la question

.

Ma deuxième pensée est que l'identifiant pour les modèles n'est pas défini droit.

par défaut Backbone.Model à l'aide de la propriété « id » comme ID pour un modèle, Collection.get (id) retourne le modèle avec l'ID que vous avez passé dans.

Alors, est la réponse de data.php ont une propriété id?

Essayez plutôt:

 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();
    },

  }))();

Ce qui devrait renvoyer le premier et le dernier modèle, et de prendre la question d'identification de l'image.

Si cela fonctionne, qu'est-ce que les modèles montrent la propriété id (coll.first () id.)?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top