对相关模型调用model.get(),返回骨干关系属性的null值



我目前正在为一个使用web sql存储的PhoneGap项目使用主干、主干关系和jQuery。

我试图使用model.get('key')从父对象中提取一个相关的模型对象,但当我这样做时,它会返回一个只有id属性集的相关模型对象-所有其他属性都不存在。

在我的游戏模型中,我定义了如下关系:

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-08-12:

上述问题的解决方案是,在SQL查询实际运行之前,console.log在$.when调用和对象输出时出错。这已经用进行了更正

$.when.apply(this, dfds).done(...)

现在我遇到了一个加载问题,因为主干关系使用Store来确保只有一个Model对象的实例存在。基本上,我向视图渲染了4次,以将一个项目附加到列表中,但视图中的最后一个项目在其他项目之前返回,并带有空的相关对象。这是因为先前的列表项正在加载相同的相关对象,并在Store中标记为已加载,但实际上查询尚未执行——它只是一个尚未加载的空实例。

我需要一些方法来按顺序循环浏览我的列表,这样就不会发生这种情况。有什么建议吗?

在代码的相关部分中,将includeInJson更正为includeInJSON

关于includeInJSON 的主干关系文档

使用dfds.push代替dfds = dfds.concat,使用更快更好

比较测试-阵列连接与推送

相关内容

  • 没有找到相关文章