web-dev-qa-db-fra.com

Backbone.js + Rest. La collection n'est pas remplie après la récupération ()

Je suis nouveau dans Backbone. J'essaie donc de récupérer les données du service REST.

c'est 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 retourne 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 à REST et la réponse ont été reçus, comment puis-je voir si la collection entityList est remplie de 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 avec mon code?

37
Danyan

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

Autrement dit, 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 de la collection une fois rempli:

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