Javascript Backbone.js model.get()返回';未定义';即使我可以在console.log中看到属性
我有一个模型实例,我在其中设置了另一个模型实例,即Javascript Backbone.js model.get()返回';未定义';即使我可以在console.log中看到属性,javascript,backbone.js,Javascript,Backbone.js,我有一个模型实例,我在其中设置了另一个模型实例,即model.set('rsvp',new App.rsvp) 当我迭代集合以在视图中生成它们的列表时,当调用model.rsvp.get('attenting')时,我会得到undefined 然而,当我执行console.log(model.rsvp)时,我得到了以下信息: Rsvp _changing: false _escapedAttributes: Object _moreChanges: false _previousAttribut
model.set('rsvp',new App.rsvp)
当我迭代集合以在视图中生成它们的列表时,当调用model.rsvp.get('attenting')
时,我会得到undefined
然而,当我执行console.log(model.rsvp)
时,我得到了以下信息:
Rsvp
_changing: false
_escapedAttributes: Object
_moreChanges: false
_previousAttributes: Object
_setting: false
attributes: Object
attending: true
created_at: "2012-03-28T09:42:22-05:00"
event_id: 20
id: 12
updated_at: "2012-03-28T09:42:22-05:00"
user_id: 3
__proto__: Object
cid: "c53"
id: 12
__proto__: Rsvp
因此,对象似乎没有问题,但是get返回未定义的
我必须承认我的Javascript技能仍然很弱。我在这里遗漏了什么?从理论上讲,您所做的应该是可行的,但是绕过属性并直接在模型实例上存储属性可能不是一个好主意。这是一个例子。我猜您的模型实例是通过代码中的其他地方从源数据通过
fetch
重新创建的,因此model.rsvp
属性将消失。该或模型
与您认为的实例不同。console.log(Object)
可以欺骗您。在调用console.log
时,它不会向您显示对象的状态
检查并打开控制台。您可以看到console.log
如何在脚本末尾而不是console.log
调用时显示对象的状态
要获得更可靠的信息,请使用更简单的值调用控制台.log
(通过OSX测试的是Chrome、Firefox和Safari)
阅读本文了解更多详细信息:model.rsvp=foo
(让我们调用这个代码位#1),它等价于model['rsvp']=foo
与model.set({'rsvp':foo})不同代码>(代码位#2)。如果要将另一个模型实例foo
(或其他对象或值)固定到模型实例model
,请使用代码位#1或其等效项。如果要将属性值对添加到最终可能永久存储在某处的模型实例中,请使用代码位#2。同样,如果使用model.rsvp=foo,则只需要定义model.rsvp
代码>或模型['rsvp']=foo代码>我最初尝试先使用.set,结果相同。和console.log
s背对背。所以它显示实例,然后在我尝试获取属性时显示undefined。所以我不知道在这段时间内它会被重置。你说得对。调用$.when时出现错误,但我不知道这是问题的根源,因为console.log看起来不错。显然不好。谢谢