骨干模型toJSON不会呈现所有属性
我发现类似这样的问题:Backbone model .toJSON()不会将model.set的所有属性呈现给JSON
但他们没有解决。
我有一个类似的问题。 以下是一个示例代码:
Animal = Backbone.Model.extend({
...
...,
initStats:function(){
this.attributes.stats = [];
var that = this;
var type = new Species();
type.store.findAll(type, function(tx, res){
var base = JSON.parse(res.rows.item(that.attributes.did-1).value);
that.set("name",base.name);
that.set("text", base.text);
return that;
}, function(tx,err){console.log(err)}, "");
}
});
type.store.findAll
是Species类中的一个函数,它连接到DB并返回所有物种。
并在另一页上我:
mym = new Animal();
mym.initStats().save(); //see below
mym.store.findAll(mym, function(tx,res){
for(var i = 0;i < res.rows.length; i++){
console.log(res.rows.item(i).value);
}
}, function(tx,err){console.log(err)}, "");
再次, Animal.store.findAll
是查找所有动物的函数。 Animal.save()
的SQL生成函数如下所示:
create: function (model,success,error,options) {
//when you want use your id as identifier, use apiid attribute
if(!model.attributes[model.idAttribute]) {
// Reference model.attributes.apiid for backward compatibility.
var obj = {};
if(model.attributes.apiid){
obj[model.idAttribute] = model.attributes.apiid;
delete model.attributes.apiid;
}else{
obj[model.idAttribute] = guid();
}
model.set(obj);
}
var colNames = ["`id`", "`value`"];
var placeholders = ['?', '?'];
var params = [model.attributes[model.idAttribute], JSON.stringify(model.toJSON())];
console.log(model);
console.log(model.toJSON());
this.columns.forEach(function(col) {
colNames.push("`" + col.name + "`");
placeholders.push(['?']);
params.push(model.attributes[col.name]);
});
var orReplace = WebSQLStore.insertOrReplace ? ' OR REPLACE' : '';
//console.log("INSERT" + orReplace + " INTO `" + this.tableName + "`(" + colNames.join(",") + ")VALUES(" + placeholders.join(",") + ");");
this._executeSql("INSERT" + orReplace + " INTO `" + this.tableName + "`(" + colNames.join(",") + ")VALUES(" + placeholders.join(",") + ");", params, success, error, options);
控制台输出是:(我只是把字符串化的JSON)
s {cid:“c575”,attributes:Object,_changing:false,_previousAttributes:Object,changed:Object ...} {"name":null, "text":null, "id":"5475b1e0-9d6c-48d1-e090-cb84e4e84ca6"}
{"name":null, "text":null, "id":"5475b1e0-9d6c-48d1-e090-cb84e4e84ca6"}
id由模型中的其他函数生成。 第一行是模型(在toJSON之前),第二行是JSON对象,第三行是SQL select结果。 实际打印顺序中有三行。
我不知道名字和文字为什么是空的。 在控制台输出中,它们都在s.attributes下有价值。
假设findAll函数是异步的,你怎么知道save()在mym.initStats().save();
在initStats中的findAll完成之前没有发生?
上一篇: Backbone model toJSON does not render all attributes
下一篇: backbone model undefined in the template. Using backbone