在相关模型上调用model.get(),为具有骨干关系的属性返回空值

时间:2013-08-12 06:26:39

标签: jquery backbone.js web-sql backbone-relational

我目前正在使用骨干,骨干关系和jQuery来处理使用web-sql存储的PhoneGap项目。

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

在我的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-08-12:

上面的解决方案是我的$ .when调用中的错误,并且在SQL查询实际运行之前,console.log正在输出对象。这已得到纠正:

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

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

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

1 个答案:

答案 0 :(得分:0)

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

Backbone-Relational docs about includeInJSON

使用dfds.push代替dfds = dfds.concat,使用

更快更好

Comparision Tests - Array concat vs push