型号代码:
App.Team = Backbone.RelationalModel.extend({
urlRoot: 'data/json/team',
/*urlRoot: 'data/json/myteam.txt',*/
idAttribute: 'id',
relations:
...
app.currentTeam = new App.Team({id:11});
查看:
var trophiesBox = JST['teaminfo/history/leftbox'](app.currentTeam.attributes);
$("#teamhistory_leftbox").append(trophiesBox);
for (var i = 1; i <= app.currentTeam.attributes.history.length; i++) {
var historyData = app.currentTeam.attributes.history.get(i);
var historyRow = JST['teaminfo/history/row'] (historyData.attributes);
$("#teamhistory_table_body").append(historyRow);
}
我得到"Uncaught TypeError: Cannot read property 'attributes' of undefined"
在var historyRow = JST['teaminfo/history/row'] (historyData.attributes);
行。
在我定义historyData之前,可能因为它是另一个模型(app.currentTeam.attributes.history
)内的集合(app.currentTeam
)中的模型。我收到[Object] (app.currentTeam.attributes.history) doesn't have a 'get' method
类型的错误。现在它传递正常,但我在下一行收到另一条错误消息,所以我想知道我的代码在这里出了什么问题。
app.currentTeam.attributes
加载正常,所以我想在检索另一个模型中集合内的模型属性时会出现问题。
编辑团队和历史记录集合的关系:
{
type: Backbone.HasMany,
key: 'history',
relatedModel: 'App.HistoryItem',
collectionType: 'App.History',
reverseRelation: {
key: 'team',
includeInJSON: 'id',
}
}
答案 0 :(得分:1)
你从错误的方法
获得模型app.currentTeam.attributes.history.get(i);
你必须使用
app.currentTeam.get('history') // you got collection
app.currentTeam.get('history').at(i); // you got model from collection by index
UPDATE1: 尝试使用iterator从集合中获取元素:
var trophiesBox = JST['teaminfo/history/leftbox'](app.currentTeam.attributes);
$("#teamhistory_leftbox").append(trophiesBox);
app.currentTeam.get('history').each(function(historyData, i) {
var historyRow = JST['teaminfo/history/row'](historyData.attributes);
$("#teamhistory_table_body").append(historyRow);
}, this);
答案 1 :(得分:0)
您检查了Backbone Associations。这可能会有所帮助。