通过索引访问数组

时间:2013-02-04 10:35:44

标签: javascript mongodb meteor

我尝试通过阅读Todo-List示例中的标签处理方式以及如何在缔约方示例中处理RSVPS来解决这个问题,但我无法找到实现目标的一般方法。 我有一个计划集合,其名称为ownerid和excerciselist

  

Plans.insert({name:names [i],ownerId:1,excerciselist:excercises});

现在在这个Excerciselist中,我想通过ID添加未定义的Amout of Excercises。 我有一个Excercisecollection,其中包含以下内容:

  

Excercises.insert({name:names [i],muscle:muscles [i],device:devices [i],description:descriptions [i]});

现在所有这些练习都默认具有唯一的_id元素。 添加到excerciselist没有问题我可以通过推送做到这一点。 但我无法弄清楚的是,我如何只能通过它的索引访问excerciselist中的某些ID。

我只能通过

访问整个Stringarray并以HTML格式输出
  

{{#each planarray}}           {{excerciselist}}                  {{/每}}   但是没有可能做像smoething一样   {{excerciselist}}

我也试过只将excerciselist返回到planarray,但问题是因为它只是索引而没有映射,所以LiveHTML无法访问它。

有没有人知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

为什么不为Excersies插入添加唯一ID的字段?

Excercises.insert({ uniqueID: [i], name: names[i], muscle: muscles[i], device: devices[i], description: descriptions[i]});

通过这种方式,您可以根据uniqueID字段获得所需的练习。

哦,你应该把“uniqueID”称为更有意义的东西。

答案 1 :(得分:0)

我发现了一个小小的解决方法,这并不是我想到的,但它完成了工作。

  Template.editplan.excercises = function() {
    var names = [];
    var add = [];
    var adder = null;
    for(var i = 0; i < this.excerciselist.length; i++)
    {
      add[i] = [];
      adder = Excercises.find({_id: this.excerciselist[i]});
      add[i]['_id'] = this.excerciselist[i];
      add[i]['location'] = i;
      adder.forEach(function (obj) {
        add[i]['name'] = obj.name;
      });
      names.push(add[i]);
    }
    return names;
  };

基本上我创建了一个新的数组,其中我放了我想要的数据,所以我可以在LiveHTML中阅读它,参见下面的例子

{{#each planarray}}
        <h1>{{name}}</h1>
        {{#each excercises}}
        {{name}}
        {{/each}}
        <select name="selectedexcercise{{_id}}" id="selectedexcercise{{_id}}">
            {{> excerciseoption}}
        </select>
        <input type="button" class="addtoplan" value="Eine Übung hinzfügen">
    {{/each}}

但必须有一种更有效或更好的方式......至少我希望如此!