2013-10-15 7 views
0

Je suis nouveau à Backbone et j'ai un problème concernant les modèles imbriqués. Ici, j'ai data.json où je suit JSON:Modèles imbriqués dans Backbone

[ 
    { 
     "name": "Project", 
     "description" : "This is a Peugeot website", 
     "url" : "http://peugeot.am", 
     "images" : [ 
      { "image" : "A", "thumb" : "a" }, 
      { "image" : "B", "thumb" : "b" }, 
      { "image" : "C", "thumb" : "c" } 
     ] 
    }, 
    { 
     "name" : "Ararat", 
     "description" : "This is a Ararat website", 
     "url" : "http://ararat.am", 
     "images" : [ 
      { "image" : "A", "thumb" : "a" }, 
      { "image" : "B", "thumb" : "b" }, 
      { "image" : "C", "thumb" : "c" } 
     ] 
    }, 
    { 
     "name" : "Procredit Bank", 
     "description" : "This is a Procredit Bank website", 
     "url" : "http://procredit.am", 
     "images" : [ 
      { "image" : "A", "thumb" : "a" }, 
      { "image" : "B", "thumb" : "b" }, 
      { "image" : "C", "thumb" : "c" } 
     ] 
    } 
] 

Dans Backbone Je suis en train de récupérer les données, mais je reçois un tableau vide.

var myapp = myapp || {}; 

$(function() { 

    myapp.Image= Backbone.Model.extend({ 
     initialize: function() { 
      this.Img = this.get('image'); 
      this.Thumb = this.get('thumb'); 
     } 
    }); 

    myapp.Images= Backbone.Collection.extend({ model: myapp.Image }); 

    myapp.Item= Backbone.Model.extend({ 
     initialize: function() { 
      this.Name = this.get('name'); 
      this.Description = this.get('description'); 
      this.URL = this.get('url'); 
      this.subs = new myapp.Images(this.get('images')); 
     } 
    }); 

    myapp.Items= Backbone.Collection.extend({ 
     model: myapp.Item, 
     url: 'content/js/data.json', 
     parse: function (resp, xhr) { return JSON.parse(resp); } 
    }); 

    var items = new myapp.Items(); 
    items.fetch(); 
    console.log(items.toJSON()); 
}); 

Maintenant, qu'est-ce que je fais mal ci-dessus? J'ai besoin de récupérer des données pour obtenir JSON afin de commencer à manipuler avec lui.

Merci d'avance!

Répondre

0

le support par défaut est assez vous manque auriez besoin pour obtenir les données pour chaque modèle imbriqué séparément

Il y a bibliothèque tels que

https://github.com/powmedia/backbone-deep-model

et

http://afeld.github.io/backbone-nested/

Qui peut être utilisé à la place

+0

Merci pour les liens! –

+0

Je n'ai pas eu de gros problèmes avec l'utilisation de la sous-collection en une fois, j'ai utilisé une structure de données similaire - ce n'est pas très bien documenté. – Marcus

0
items.fetch(); 
console.log(items.toJSON()); 

Collection.fetch() est une opération asynchrone. Il ne produira pas de réponse tant que la requête ne sera pas renvoyée par le serveur. Essayez ceci:

items.fetch().done(function(){ 
    console.log(items.toJSON()); 
}); 

Vous pouvez également utiliser l'inspecteur Web pour surveiller les requêtes réseau Safari/Chrome (ou firefox débogueur/Firebug) et voir que vos appels sont de tir avec succès (et inspecter les réponses), ou mettre un autre console.log à l'intérieur de la fonction 'parse' de votre collection.

http://backbonejs.org/#Collection-fetch

+0

Il n'a pas aidé, je reçois toujours tableau vide –

Questions connexes