backbonejs 获取model和集合数据
发布于 10 年前 作者 luoshizheng 5792 次浏览 最后一次编辑是 8 年前 来自 问答

我通过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 来得到整个集合的数据, 问题是也得不到。
请问下问题出现在哪里呢。

9 回复

自己顶

$(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 嗯, 我晚上回去贴上来。

@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方法去掉了就正确了, 谢谢你。

回到顶部