Ho bisogno di eseguire il rendering degli attributi di un modello su JSON in modo da poterli passare in un modello. Ecco cosa una funzione render() per una vista assomiglia:Il modello Backbone .toJSON() non esegue il rendering di tutti gli attributi su JSON
render: function() {
console.log(this.model);
console.log(this.model.toJSON());
$(this.el).html(this.template(this.model.toJSON()));
return this;
},
Ecco l'output attributi dopo aver fatto console.log (this.model):
created_at: "2012-04-19"
id: "29"
name: "item"
resource_uri: "/api/v1/item/29/"
updated_at: "2012-04-21"
user: "/api/v1/user/9/"
Ecco JSON del modello output dopo aver fatto console.log (this.model.toJSON()):
id: "29"
__proto__: Object
Che cosa è successo?
Edit: Ecco l'istanza:
var goal = new Goal({id: id});
goal.fetch();
var goalFullView = new GoalFullView({
model: goal,
});
Ecco il contenuto della nuova vista:
console.log(this.model.attributes);
console.log(this.model.toJSON());
Ecco cosa dice la console:
Object
created_at: "2012-04-23"
id: "32"
name: "test"
resource_uri: "/api/v1/goal/32/"
updated_at: "2012-04-23"
user: "/api/v1/user/9/"
__proto__: Object
Object
id: "32"
name: "test"
__proto__: Object
Se il toJSON dovrebbe fare un clone degli attributi, perché non copia il nome corretto o perché non copia i campi created_at, updated_at?
Edit 2: Ecco il modello:
var Goal = Backbone.Model.extend({
// Default attributes for Goal
defaults: {
name: "empty goal",
},
// Check that the user entered a goal
validate: function(attrs) {
if (!attrs.name) {
return "name is blank";
}
},
// Do HTTP requests on this endpoint
url: function() {
if (this.isNew()) {
return API_URL + "goal/" + this.get("id") + FORMAT_JSON;
}
return API_URL + "goal/" + FORMAT_JSON;
//API_URL + "goal" + FORMAT_JSON,
},
});
Edit 3: ho capito che ho bisogno di usare il callback successo da prendere per rendere una vista che utilizza il modello:
goal.fetch ({success: function (model) { var goalFullView = new GoalFullView ({ modello: goal, }); }});
può mostrare il modello e la sua esemplificazione come bene? – mindandmedia
Hai qualcos'altro nel codice che rende invisibili gli altri attributi per toJSON(), forse guarda il tuo Modello o incolla, come lo stai inizializzando ... vedi [jsfiddle] (http://jsfiddle.net/drinchev/ JLfJB/1 /) – drinchev
Ho modificato il post originale con la classe Model. Non riesco a capire perché il toJSON non funzioni. Anche se questo.model.attributes stampa l'elenco corretto di attributi, quando provo a eseguire this.model.get ("id") o uno degli altri attributi, vengono visualizzati come vuoti. Chiaramente, è presente quando chiamo gli attributi sull'istanza del modello, però. – egidra