【问题标题】:How to place a collection within a model in Backbone.js?如何在 Backbone.js 的模型中放置一个集合?
【发布时间】:2013-04-14 00:49:15
【问题描述】:

我想了解如何在模型中添加结构集合。我的简单应用程序有团队(即团队模型和团队集合),每个团队都有一堆玩家(玩家模型和玩家集合)。所以它的视觉结构是这样的:

Team A
   - Player 1
   - Player 2
   - Player 3
Team B
   - Player 1
   - Player 2

等等……

如何构建这样一个主干应用程序?到目前为止,这是我的计划: 1) 我将有一个团队集合,它将包含多个团队,其模型属性对应于 TeamModel。 2) 一个玩家集合,它将包含所有多个玩家,并且模型属性对应于 PlayerModel。

现在我很困惑如何让 Team Collection 和 Model 与 Player Collection 和 Model 相对应。 IE。根据我的设计,第三种关系是每支球队都有一组球员。但是我不确定如何实现。

【问题讨论】:

    标签: backbone.js backbone.js-collections


    【解决方案1】:

    "现在我很困惑如何让团队收藏和模型与玩家收藏和模型相对应。也就是说,根据我的设计,第三种关系是每个团队都有一个集合玩家。"

    只需向您的团队模型添加一个属性,该属性将是一组玩家。

    var Team = Backbone.Model.extend({
      initialize: function() {
        // assuming Players a collection of players
        this.set('players', new Players());
      }
    });
    

    现在,填充数据是另一个有很多解决方案的问题。但是以这种方式做事会给你一个强大的结构。

    【讨论】:

    • @clockwork189 顺便说一句,我没有精确,但你不能把它放在 defaults 中。否则,您的所有实例将共享同一个集合。
    【解决方案2】:

    你可以这样做:

    App.Models.Player = Backbone.Model.extend({});
    
    App.Collections.Players = Backbone.Collection.extend({
        model: App.Models.Player,
        url: 'players',
        getTeam: function(idTeam){
            var gf = _.filter( this.models, function(model){
        return (
            model.get('idTeam') == idTeam
        );
        });
            return gf;
        }
    });
    
    App.Models.Team = Backbone.Model.extend({
        players: players( this.get('id') ) // asuming that players is an App.Collections.Players instance.
    });
    
    App.Collections.Team = Backbone.Collection.extend({
        model: App.Models.Team,
        url: 'teams'
    });
    

    然后,当您创建每个实例并从服务器收集数据时,在填充所有集合后启动路由器。 它应该这样工作。

    【讨论】:

      猜你喜欢
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 2011-10-19
      • 2011-09-25
      • 2013-10-04
      • 1970-01-01
      • 2012-04-07
      相关资源
      最近更新 更多