Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在视图中附加视图好吗?_Javascript_Backbone.js - Fatal编程技术网

Javascript 在视图中附加视图好吗?

Javascript 在视图中附加视图好吗?,javascript,backbone.js,Javascript,Backbone.js,起初,我对复杂的事情做了太多的考虑,不知道如何使用backbone.js在列表中创建列表。我最终得到了它,只需为我应用程序中的所有玩家创建一个列表项视图。然后为我的应用程序中的所有团队创建了一个视图 我通过创建一个应用程序视图将它们“粘合”或“附加”在一起,这两个视图都有一个each语句,在这两个视图附加到应用程序视图根之前,我将播放器列表项视图附加到团队视图中。让我给你看看 以下是我在应用程序视图中的渲染方法:我只是不确定这是否是个坏主意,我认为有更好的方法,但这是我唯一成功使用的方法。这对我

起初,我对复杂的事情做了太多的考虑,不知道如何使用backbone.js在列表中创建列表。我最终得到了它,只需为我应用程序中的所有玩家创建一个列表项视图。然后为我的应用程序中的所有团队创建了一个视图

我通过创建一个应用程序视图将它们“粘合”或“附加”在一起,这两个视图都有一个each语句,在这两个视图附加到应用程序视图根之前,我将播放器列表项视图附加到团队视图中。让我给你看看

以下是我在应用程序视图中的渲染方法:我只是不确定这是否是个坏主意,我认为有更好的方法,但这是我唯一成功使用的方法。这对我来说很有意义,我可以毫无问题地在每个视图上运行事件

我问过这个问题,有人告诉我最好创建子视图,我很确定这是一个子视图结构?这个方法有没有漏洞,如果有,我想解释一下为什么这个方法不好,以及我如何改进它。最后但并非最不重要的一点是,我确实关心干净的可维护代码,但最重要的是,我有
团队
用如下HTML结果包装其受人尊敬的
玩家

<div>
  <ul class="lakers">
      <li>Kobe</li>
      <li>Pau</li>
  </ul>
  <ul class="spurs">
      <li>Tony</li>
      <li>Tim</li>
  </ul>
</div>

  • 神户
  • 加索尔
  • 托尼
  • 提姆
再一次,我想要一些建设性的批评,主要是将两种观点联系起来的优点和缺点。在我继续之前,我只需要问一下,我想确保当我开始扩展代码时,我没有养成坏习惯或在代码中产生问题,我相信您理解这一点

我问过这个问题,有人告诉我最好创建子视图,我很确定这是一个子视图结构

是的,您知道,而且
TeamView
是子视图。然而,这是一个“僵尸视图”。它本身有什么作用吗?视图应负责渲染自身,包括附加其直接子视图,但不知道如何渲染其子视图,即,您应将
玩家
集合传递给
团队视图
,并将以下逻辑移到
团队视图

    var teamPlayers = this.players.where({team_id: team.get('id')})          
    _.each(teamPlayers, function(player) {
        var playerView = new PlayerView({ model: player });
        var playerHtml = playerView.render().el;

        $(teamHtml).append(playerHtml);

    }, this);

哦,你看,我确实试过了,但是对如何编写
var teamPlayers=this.players.where({team_id:team.get('id')})感到困惑。
我仍然是,
team.get
将是未定义的
teamPlayers
只在每个团队循环中起作用。我还不知道如何循环团队,有4个团队大约有5-6名玩家。也许我很傻,错过了一些简单的东西,但这让我很开心。我知道很难看到
teamPlayers
在做什么,但在players模型上有一个属性
team\u id
,需要匹配它的相关团队
team.get('id')
可以返回1、2、3或4(4个团队),然后它会将具有
team\u id的玩家添加到其受尊敬的团队中。这就是为什么要把球员包装起来并将他们联系起来。@MichaelJosephAubry我认为
球员
团队
的子集合,对吗?您已经将
团队
传递到
团队视图
;要让它发挥作用,你只需要通过相关的球员。您可以传递整个
集合
并让
TeamView
进行筛选,也可以在外部进行筛选并将
teamPlayers
传递给
TeamView
。这应该很容易,否则我就误解了。@MichaelJosephAubry你说
团队.get
团队视图中是未定义的?因为它是作为模型传递的,所以您应该使用
this.model.get
来代替它,您知道吗?
    var teamPlayers = this.players.where({team_id: team.get('id')})          
    _.each(teamPlayers, function(player) {
        var playerView = new PlayerView({ model: player });
        var playerHtml = playerView.render().el;

        $(teamHtml).append(playerHtml);

    }, this);