Backbone:如何从另一个模型中的集合中获取模型属性?

时间:2013-12-13 05:33:07

标签: javascript backbone.js backbone-relational

型号代码:

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',
    }
}

2 个答案:

答案 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。这可能会有所帮助。