如何使用Meteor和MongoDB引用实现嵌套的#each块?

时间:2014-04-21 15:53:33

标签: javascript mongodb meteor spacebars

所以,我有以下HandlebarsJS助手:

<ul class="list-unstyled">
      {{#each gralSkills}}
        <li class="pl-14"><i class="flaticon-checkmark4"></i> 
          <a data-toggle="collapse" href="#collapse{{number}}">
            {{gralSkillName}}
          </a>
          <div id="collapse{{number}}" class="panel-collapse collapse small pl-21">
              <span class="block">{{gralSkillDescription}}</span>
              <span class="uppercase block">Indicadores - <a href="#" class="flaticon-plus34 text-danger not-underline" id="new-gral-skill-indicator"></a></span>
              <ul class="list-unstyled pl-14">                
                {{#each gralSkillIndicators}}
                  <li>- {{indicatorName}}</li>
                {{/each}}
              </ul>
          </div>
        </li>
      {{/each}}
      </ul>

使用相应的JS代码:

 Template.courseEdit.helpers({
      gralSkills: function(){
        var thisCourseId = Session.get('templateId');
        // console.log(thisCourseId);
        return gralSkills.find({"courseId": thisCourseId});
      },
      gralSkillIndicators: function() {
        var thisGralSkillId = Session.get('templateId');
        return Indicators.find({'courseId': thisGralSkillId});
      }
    });

视图如下所示:

Screenshot http://soygus.com/img/emdinscreenshot.png

这意味着我将两个数据都添加到视图中。问题出现在循环中,我找不到如何将 Indicadores 引用到其各自的父级。

查看我的MongoDB Indicators集合:

   /* 0 */
    {
        "indicatorName" : "La alumna presenta en clase con seguridad y confianza",
        // Belongs to a gralSkill (Autoestima)
        "gralSkillId" : "KgTAPKMeML2qWvsXA",
        "courseId" : "3vCN5v5brsid5tFGb",
        "_id" : "rpnkiRhdTMrsjgn7i"
    }

创建的唯一指标属于视图中的第一个列表项,但是,我将其显示在所有列表项中。

这是 gralSkills 集合供您参考:

  /* 0 */
    {
        "gralSkillName" : "Autoestima",
        "gralSkillDescription" : "La capacidad de confiar en las habilidades propias.",
        "submitted" : 1398089534856,
        "number" : 1,
        "courseId" : "3vCN5v5brsid5tFGb",
        "_id" : "KgTAPKMeML2qWvsXA"
    }

    /* 1 */
    {
        "gralSkillName" : "Emprendimiento",
        "gralSkillDescription" : "La capacidad de proponer soluciones con ideas y modelos de negocio",
        "submitted" : 1398094493828,
        "number" : 2,
        "courseId" : "3vCN5v5brsid5tFGb",
        "_id" : "zJGfgnZE8TMejQtWH"
    }

如何让列表项显示其对应的指标

提前致谢。

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确,但我认为在gralSkillIndicators帮助器中,您似乎不应该将全局会话变量Session.get('templateId')分配给{{ 1}},因为该Session变量对于循环的所有项都是相同的。

相反,您应该编写类似thisGralSkillId的内容,这样您就可以访问父数据上下文的var thisGralSkillId = this._id。如果这有意义吗?