37 votes

Backbone.js + Rest. Collection n'est pas remplie après fetch()

Je suis nouveau dans Backbone. J'essaie donc d'extraire des données d'un service REST.

Voici mon code simple :

$(function () {

    var Entity = Backbone.Model.extend({
        url: function() {
            return 'http://localhost:8080/rest/entity/'+this.id;
        }
    });

    var EntityList = Backbone.Collection.extend({       
        model: Entity,
        url: 'http://localhost:8080/rest/entity'
    });

    var entityList = new EntityList();

    entityList.fetch();

});

mon service de repos renvoie le JSON suivant :

[{"id":1387,
  "version":3,
  "entityName":"entity01",
  "entityLabel":"Entity01",
  "entityPluralLabel":"Entity01",
  "attributes":
     [{"id":1425,
       "slot":"D001",
       "version":0,
       "attributeName":"dfield",
       "attributeType":
          {"id":7,
           "description":"Date",
           "attributeType":"date",
           "databaseType":"DATE"
          },
       "options":[],
       "order":2,
       "attributeLabel":"dField",
       "checked":null
      },
      {"id":1424,
       "slot":"S001",
       "version":0,
       "attributeName":"txfield",
       "attributeType":
          {"id":1,
           "description":"Textbox",
           "attributeType":"textbox",
           "databaseType":"STRING"
          },
       "options":[],
       "order":1,
       "attributeLabel":"txField",
       "checked":null
      }
     ]  
 },
 {"id":1426,
  "version":3,
  "entityName":"entity02",
  "entityLabel":"Entity02",
  "entityPluralLabel":"Entity02",
  "attributes":
     [{"id":1464,
       "slot":"D001",
       "version":0,
       "attributeName":"dfield",
       "attributeType":
          {"id":7,
           "description":"Date",
           "attributeType":"date",
           "databaseType":"DATE"
          },
       "options":[],
       "order":2,
       "attributeLabel":"dField",
       "checked":null
      }
     ]
 }
]

Dans le débogueur, je vois que la demande a été envoyée au service REST et que la réponse a été reçue. Comment puis-je voir si la collection entityList est remplie avec les données reçues ou non ? Dans le débogueur, entityList.models est vide après entityList.fetch() ;

Suis-je sur la bonne voie ou quelque chose ne va pas dans mon code ?

83voto

kulesa Points 2116

Je pense que vous êtes sur la bonne voie. Mais parce que Backbone.Collection.fetch() est asynchrone, vous devez vérifier la valeur de l'option entityList.models non pas juste après l'appel de la méthode, mais dans success callback de fetch.

C'est-à-dire que ce code dira que la liste des modèles est vide :

entityList.fetch();
console.log(entityList.models); // => 0 (collection being fetched)

tandis que ce code imprimera le nombre de modèles dans la collection lorsqu'elle aura été remplie :

entityList.fetch({success: function(){
    console.log(entityList.models); // => 2 (collection have been populated)
}});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X