Backbone.js 属性/获取似乎很有趣
Backbone.js attribute / fetching seems to work funny
所以,我有以下访问我休息的代码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 处的对象中。这是为什么?我是这里的新手,但这绝对不是大多数教程显示 backbone 工作原理的方式。
所以如果我这样做 daryl.get('first'),我会得到未定义的。 daryl.get('id') 按预期工作。 daryl.get('0') 实际上 returns 实际模型的一个普通旧 javascript 对象,即我可能期望我的 backbone 模型实际上是什么。这是为什么?
不确定这是否是问题所在(但在调用 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
returns undefined
.
您的服务器似乎在其响应中 returning 一个数组,因此为什么调用 model.get('0')
是 returning 您真正想要的属性。您需要将服务器的响应修改为仅 return 对象(而不是数组中的对象),或者您需要将 parse
方法添加到模型到 return 第一项在响应数组中。
所以,我有以下访问我休息的代码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 处的对象中。这是为什么?我是这里的新手,但这绝对不是大多数教程显示 backbone 工作原理的方式。
所以如果我这样做 daryl.get('first'),我会得到未定义的。 daryl.get('id') 按预期工作。 daryl.get('0') 实际上 returns 实际模型的一个普通旧 javascript 对象,即我可能期望我的 backbone 模型实际上是什么。这是为什么?
不确定这是否是问题所在(但在调用 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
returns undefined
.
您的服务器似乎在其响应中 returning 一个数组,因此为什么调用 model.get('0')
是 returning 您真正想要的属性。您需要将服务器的响应修改为仅 return 对象(而不是数组中的对象),或者您需要将 parse
方法添加到模型到 return 第一项在响应数组中。