【发布时间】:2013-08-12 06:26:38
【问题描述】:
我目前正在为使用 web-sql 存储的 PhoneGap 项目使用主干、主干关系和 jQuery。
我正在尝试使用 Model.get('key') 从父对象中提取相关模型对象,但是当我这样做时,它会返回一个相关模型对象,其中仅设置了 id 属性 - 所有其他属性是不存在的。
在我的 GameModel 中,我定义了如下关系:
type: Backbone.HasOne,
key: "game_type_id",
relatedModel: GamePropertiesModel,
includeInJSON: true
... 3 more related models ...
在我看来,我正在循环我的 GameModel 的每个关系,并使用 Backbone.RelationalModel.fetchRelated() 延迟加载相关模型,如下所示:
_.each(self.model.getRelations(), function(relation) {
dfds = dfds.concat(self.model.fetchRelated(relation.key));
})
当我打电话时:
console.log( self.model.get("game_type_id") )
OR
console.log( self.model.attributes['game_type_id'] )
我得到一个 GamePropertiesModel,但唯一的值集是 ID。未列出所有其他属性。
相反,如果我打电话:
console.log( self.model )
我可以通过 GameModel.attributes.game_type_id.attributes 深入了解并查看设置了值的属性的完整列表。
任何想法为什么会发生这种情况?我需要访问这些 GameModel 的相关模型才能在我的视图/模板中显示它们的属性值。
2013 年 8 月 12 日更新:
上述解决方案是我的 $.when 调用中的一个错误,并且在 SQL 查询实际运行之前,console.log 正在输出对象。这已通过以下方式更正:
$.when.apply(this, dfds).done(...)
现在我遇到了加载问题,因为骨干关系使用 Store 来确保仅存在一个 Model 对象的实例。基本上我渲染到视图 4 次以将项目附加到列表中,但视图中的最后一个项目在其他项目之前返回,相关对象为空。这是因为之前的列表项正在加载相同的相关对象,并在 Store 中标记了它已加载,但实际上查询尚未执行——它只是一个尚未加载的空实例。
我需要一些方法来按顺序循环遍历我的列表,这样就不会发生这种情况。有什么建议吗?
【问题讨论】:
标签: jquery backbone.js web-sql backbone-relational