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

Backbone.js attribute / fetching seems to work funny

本文关键字:抓取 js 属性 Backbone      更新时间:2023-09-26

因此,我有以下代码可以访问我的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对象,即我可能期望的骨干模型实际是什么。为什么?

您的服务器在响应中似乎返回了一个数组,因此调用model.get('0')会返回您真正想要的属性。您需要修改服务器的响应以仅返回对象(而不是数组中的对象),或者需要向模型添加parse方法以返回响应数组中的第一个项。

不确定这是否是问题所在(但在调用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的原因。