Как реализовать вложенные блоки #each со ссылкой на Meteor и MongoDB?

Итак, у меня есть следующий помощник 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});
      }
    });

Вид выглядит следующим образом:

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"
    }

Единственный созданный Indicator относится к первому элементу списка в представлении, однако он отображается во всех элементах списка.

Это коллекция 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"
    }

Как я могу заставить элементы списка отображать соответствующий Индикатор?

Заранее спасибо.


person Gus    schedule 21.04.2014    source источник


Ответы (1)


Не уверен, правильно ли я понимаю, но я думаю, что в помощнике gralSkillIndicators кажется, что вы не должны назначать глобальную переменную сеанса Session.get('templateId') для thisGralSkillId, поскольку эта переменная сеанса будет одинаковой для всех элементов цикла.

Вместо этого вы должны написать что-то вроде var thisGralSkillId = this._id, что позволит вам получить доступ к _id родительского контекста данных. Если это имеет смысл?

person Sacha    schedule 21.04.2014
comment
Вуаля! Спасибо, я не знал, что вы можете так просто вызывать данные родительского контекста. - person Gus; 21.04.2014