2011-12-22 19 views
8

Sto cercando di ottenere backbone.js per caricare json. Il json si carica ma non sono sicuro di come ottenere gli oggetti nella mia collezione. O forse quello succede automaticamente e io non posso rintracciare. problema di ambito?come aggiungere json a backbone, js collection using fetch

// js codice

//model 
var Client = Backbone.Model.extend({ 
    defaults: { 
     name: 'nike', 
     img: "http://www.rcolepeterson.com/cole.jpg" 
    }, 
}); 
//collection 
var ClientCollection = Backbone.Collection.extend({ 
    defaults: { 
     model: Client 
    }, 
    model: Client, 
    url: 'json/client.json' 
}); 
//view 
var theView = Backbone.View.extend({ 
    initialize: function() { 
     this.collection = new ClientCollection(); 
     this.collection.bind("reset", this.render, this); 
     this.collection.bind("change", this.render, this); 
     this.collection.fetch(); 
    }, 
    render: function() { 
     alert("test" + this.collection.toJSON()); 
    } 
}); 
var myView = new theView(); 

// JSON

{ 
    "items": [ 
     { 
      "name": "WTBS", 
      "img": "no image" 
     }, 

     { 
      "name": "XYC", 
      "img": "no image" 
     } 
    ] 
} 

risposta

16

tuo JSON non è nel formato corretto, è possibile risolvere il JSON o aggiungere un suggerimento per backbone nel metodo parse:

var ClientCollection = Backbone.Collection.extend({ 
    defaults: { 
     model: Client 
    }, 
    model: Client, 
    url: 'json/client.json', 

    parse: function(response){ 
     return response.items; 
    } 
}); 

O risolvere il tuo JSON:

[ 
     { 
      "name": "WTBS", 
      "img": "no image" 
     }, 

     { 
      "name": "XYC", 
      "img": "no image" 
     } 
    ] 
+0

Ancora non riesco a farlo funzionare. se tengo il json lo stesso e aggiungo parse: function (response, xhr) { alert ("Collezione: ClientList: parse:" + response.items.length) ricevo un avviso. ho provato a cambiare il json e non ho ricevuto avvisi nella raccolta o vista return response.items; } vedo un avviso. A mio avviso non ottengo alcun avviso nella mia funzione di rendering –

+0

@ColePeterson puoi fare un jsfiddle – Esailija

+0

Non ero sicuro di come impostare jsfiddle mi dispiace, il mio esempio è incompleto. ma qui è a jsfiddle [collegamento] (http://jsfiddle.net/cole/bQHsb/) ogni aiuto sarebbe fantastico. di nuovo l'analisi funziona ma il rendering nella vista non si accende mai. –

0

Se si utilizza API REST, provare a spegnere questi parametri:

Backbone.emulateHTTP Backbone.emulateJSON

Problemi correlati