Domanda

Quando ho fetch modelli o raccolte dal server, io non sono in grado di accedere alle proprietà del modello, a meno che non mi stringify poi ri-analizzare.Presumibilmente gli stessi modelli sono alcune overhead aggiuntivo da backbone.js?Nota che nel sotto il codice posso eseguire stringify/analizzare in sequenza, che dovrebbe dare lo stesso risultato che ho iniziato con.Tuttavia, chiaramente ho ucciso alcuni superfluo info per eseguire queste due operazioni, in quanto il mio modello di proprietà sono ora esposte in modo diverso da prima.Sicuramente non ho bisogno di passare attraverso questi due passaggi per accedere al mio modello di proprietà, giusto?

Eg.  
thismodel = /// assume this came from server fetch
alert(thismodel.name);    // DOES NOT WORK - undefined

jsonmodel = JSON.stringify(thismodel);
var providerprefslistJSON = jQuery.parseJSON(jsonmodel);
alert(providerprefslistJSON.name);     // WORKS
È stato utile?

Soluzione

Gli oggetti del modello di backbone non sono semplici oggetti JavaScript.Mantengono i loro attributi in un hash interno .Per accedere all'attributo name è possibile fare questo:

alert(thismodel.attributes.name);

o meglio ancora usare Il metodo GET () :

alert(thismodel.get("name"));

Il motivo per cui funziona quando converti il modello in JSON e poi torna indietro è perché JSON.stringify chiama Tjson ()Metodo , che crea una stringa JSON da gli attributi interni hash , che significa quando analizzi quella stringa ottieni un unico oggetto JavaScript semplice - che non è lo stesso di un oggetto modello backbone. .

Altri suggerimenti

Primo, stai cercando di accedere alla proprietà del modello o una risposta?

Da alert(thismodel.name) sembra che si sta andando per una proprietà del modello non l'attributo.Se stai cercando un attributo del modello allora forse si desidera alert(this.model.get('name'))

Se effettivamente si sta andando per il modello.nome, quindi, fondamentalmente, il problema potrebbe risiedere nel modo in cui si analizzano i dati.Dire per esempio JSON dal tuo server è questa: {'name':'Jimmy'}.

Mentre il model.response il raw JSON inviato è "Jimmy" nel namespace in oggetto.nome, spina Dorsale, prenderà automaticamente che e trasformarlo in un modello attributo ove non diversamente indicato (es.modelObj.attributi.nome), al punto che si desidera utilizzare l' get() funzione.

Si dovrebbe essere in grado di accedere ai dati di modello abbastanza semplice, se tutto funziona.

E. g.Fetch

var model = new MyModel();
    model.id = 1;
    model.fetch({
        success: function(model, response) {
            console.log(model.get('name'));  // The model name attribute
            console.log(response.name);  // The RAW response name property
        }
    });

O forse il server non invia i dati come dati in formato JSON.È la risposta del server content-type="application/json" ?

Alcune cose da controllare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top