所以,我有以下代码访问我的rest api:
Employees.Employee = Backbone.Model.extend({
urlRoot: 'api/employee'
})
var daryl = new Employees.Employee({id:17})
daryl.fetch()
console.log(daryl.attributes)
现在,当我在console.log中输入属性时,daryl对象大致如下设置:
daryl = {
attributes:
[0]: {
id: 17,
first: 'Daryl',
last: 'xxxx',
email: 'xxx'
},
id: 17,
watchers...
protos...
}
因此尝试daryl.get(' first')导致未定义。其他所有内容都存储在索引0的数组中的对象中。为什么会这样?我在这里是一个新手,但这绝不是大多数教程似乎都展示骨干如何运作的方式。
所以如果我做daryl.get('第一次'),我会得到未定义的。 daryl.get(' id')按预期工作。 daryl.get(' 0')实际上返回了实际模型的普通旧javascript对象,即我可能期望成为我的骨干模型。这是为什么?
答案 0 :(得分:1)
不确定这是否存在问题(但在调用fetch后执行console.log
会有问题),但请务必记住daryl.fetch()
是异步发生的。
也就是说,你应该尝试:
daryl.fetch().done(function(){
console.log(daryl.attributes);
model.get("first");
});
或
daryl.fetch({success : function(model){
console.log(model);
model.get("first");
}});
这可以确保在尝试对模型进行操作之前完成AJAX请求,并且很好地为get
返回undefined
的原因。
答案 1 :(得分:1)
您的服务器似乎在其响应中返回一个数组,因此调用model.get('0')
的原因是返回您真正想要的属性。您需要修改服务器的响应以仅返回对象(而不是数组中的对象),或者您需要向模型添加parse
方法以返回响应数组中的第一个项。