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

时间:2015-03-04 21:32:12

标签: 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)

现在,当我在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对象,即我可能期望成为我的骨干模型。这是为什么?

2 个答案:

答案 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方法以返回响应数组中的第一个项。