我通过ID来查询得到一个MODEL, 但是得不到这个MODEL 对象, 比如:
var a = new ModelA({id: id})
a.fetch({success:function(model,response){
new ViewA({model:model})
}
})
这个是根据ID得到一个MODEL实例。 然后我就把model 传给视图, 在视图这边我通过this.model 得到 这个模型对象。 但是问题就出来了, 在视图这边 通过this.model.toSJON()返回的值始终只有ID,而其他数据没有显示出来,后台实际上是返回了数据到客户端的,这里就是拿不到。
第二个问题也是和第一个差不多:
var a = new CollectionA({id: id})
a.fetch({success:function(collection,response){
new ViewA({model:collection})
}
})
同样的, 我把这个集合传到视图这边。在视图这里我用 this.model.models 来得到整个集合的数据, 问题是也得不到。
请问下问题出现在哪里呢。
自己顶
$(function () { var ModelA = Backbone.Model.extend({ url: ‘/abc’ });
var a = new ModelA({
id: '123456',
})
var ViewA = Backbone.View.extend({
initialize: function () {
console.info(this.model.toJSON());
}
});
a.fetch({
success:function(model, response) {
new ViewA({
model: model
});
}
});
});
app.get(’/abc’, function (req, res) { res.send({‘name’: ‘Jack’}); res.end(); });
ViewA initialize 输出结果:Object {id: “123456”, name: “Jack”}
@udctfx 我也是这样做的, 为什么取不到呢, 需要注意些什么问题。
@luoshizheng 如果不嫌麻烦的话,能贴一下代码吗? 下次回复时间:晚9点。
@udctfx 嗯, 我晚上回去贴上来。
我后台是这样做的 app.get(’/Picture/:id’,function(req, res){ var sKeyId = req.params.id; if(sKeyId){ Pic.findById(sKeyId,function(result){ if(result){ var oWhere={id: sKeyId,Values:{clickNum:result.clickNum + 1}}; // Pic.updateByWhere(oWhere); res.send(JSON.stringify(result)); } }) } }) 模型: window.PicModel = Backbone.Model.extend({ urlRoot:’/Picture’, defaults:{ }, idAttribute: “_id”, parse:function(a,b){ // console.log(a); //console.log(b) } }) 调用视图: var collection = new PicModel({_id: id}); collection.fetch({success: function(oModel, oReponse,o){ new PicViewItem({model: oModel, M: oModel}); }, error: function(a,b,c){} }) 我在PicViewItem 视图里面 用this.model.tojSON(),返回的始终只有我传入的ID值。
@luoshizheng 恩,我刚运行了一下,你的问题出现了,我研究一下。
@luoshizheng 我发现,如果把你model里的parse方法删除了的话,就好用了。 我技术比较差,而且做开发中很少用到这个parse方法,对它不太了解。 查了中文API以后(http://www.css88.com/doc/backbone/#Model-parse),大致描述是这样的: parse(response)传入的是fetch本身请求回来的数据,打个比方,也就是你nodejs里写的res.send({name: ‘jack’})。 [可以 set 到模型的属性散列表],这句话意思是它能自动l把返回结果set到mode里去。 这样就把{name: ‘jack’}这个json "set"到model里了。 而且,这个过程是默认自动完成的。所以你预想的结果是:{id: ‘123’, name: ‘jack’}
下面那句***[可以重载它]
我觉得问题在这里,当你写了一个空的parse方法,也就是重写了它,导致model的parse方法什么也没做,也就是没有把返回结果放进model里。破坏了它原有的功能。
@udctfx 嗯, 我把parse方法去掉了就正确了, 谢谢你。