Javascript Backbone.js属性/抓取似乎很有趣

Javascript Backbone.js属性/抓取似乎很有趣,javascript,backbone.js,Javascript,Backbone.js,因此,我有以下代码访问我的rest api: Employees.Employee = Backbone.Model.extend({ urlRoot: 'api/employee' }) var daryl = new Employees.Employee({id:17}) daryl.fetch() console.log(daryl.attributes) 现在,当I console.log属性时,daryl对象的设置大致如下: daryl = { attributes:

因此,我有以下代码访问我的rest api:

Employees.Employee = Backbone.Model.extend({
    urlRoot: 'api/employee'
})
var daryl = new Employees.Employee({id:17})

daryl.fetch()
console.log(daryl.attributes)
现在,当I console.log属性时,daryl对象的设置大致如下:

daryl = {
  attributes: 
    [0]: {
    id: 17,
    first: 'Daryl',
    last: 'xxxx',
    email: 'xxx'
    },
    id: 17,
    watchers...
    protos...
 }
因此,尝试daryl.get('first')会导致未定义的结果。其他所有内容都存储在数组中索引为0的对象中。为什么会这样?我是这里的新手,但这绝对不是大多数教程所展示的主干如何工作的方式


所以,如果我使用daryl.get('first'),我就没有定义。daryl.get('id')按预期工作。get('0')实际上返回实际模型的一个普通的旧javascript对象,即我可能期望的主干模型的实际状态。这是为什么?

不确定这是否是问题所在(但在调用fetch后执行
console.log
是有问题的),但重要的是要记住
daryl.fetch()
是异步发生的

也就是说,您应该尝试:

daryl.fetch().done(function(){
  console.log(daryl.attributes);
  model.get("first");
});


这确保了AJAX请求在尝试对模型执行操作之前已完成,并且很可能是因为
get
返回
undefined
您的服务器在其响应中似乎返回了一个数组,因此为什么调用
model.get('0')
会返回您真正想要的属性。您需要修改服务器的响应以仅返回对象(而不是数组中的对象),或者需要向模型中添加
parse
方法以返回响应数组中的第一项。

@dkran,如果时间正确,但是,除非像我所讨论的那样将代码放在回调中,否则它不会一直存在。我使用了您的代码,将第二行也更改为console.log(model.get(“first”);这导致了未定义。第一个console.log显示了console.log(daryl)以前显示的填充模型。不过谢谢你的快速获取课程。非常感谢!!!我已经更新了我的描述,以更具体地显示问题,因为这似乎与我的问题无关。JSON的响应是什么样子的?[{“id”:17,“first”:“Daryl”,“last”:“Kranec”,“email”:dkranec@gmail.com“}]如果它只有一个数组,那么它在数组中是否有故障?这是您的问题,您需要删除前导的
[
和尾随的
]
从响应中。你发送的数组中只有一个对象,你应该只发送该对象。这真的是正确的方法吗?所以我只在数组中包含多个对象时才返回一个数组?我犯了一个错误。我几乎把响应放在了第一篇文章中,但我读到的另一篇文章说你应该总是返回一个对象数组使其保持一致。我有一种奇怪的感觉。介意发布一个答案以便我检查它吗?是的,通常你会为集合的获取返回一个对象数组,但对于一个模型,你只返回一个对象。我在下面添加了我的答案。在你写回复询问我的服务器的响应时,我实际上在查看w在该时间点也正在编写解析方法。。
daryl.fetch({success : function(model){
  console.log(model);
  model.get("first");
}});