访问流星模板助手中的父数据

时间:2015-06-27 01:06:18

标签: mongodb meteor

我有一个群组的模板。每个组文档都包含一个数组,每个元素包含一个数字和一个布尔值。模板布局如下:

<template name="group">
  <li class="{{#if checked}}checked{{/if}} groupBox">

    <button class="delete">&times;</button>

    <input type="checkbox" checked="{{checked}}" class="toggle-checked-group" />

    <span class="text">{{name}}</span>

    <ul>
      {{#each this.numbers}}
        <li class="checked">
          <button class="deleteNumber">&times;</button>

          <input type="checkbox" checked="{{checked}}" class="toggle-checked-number" />

          <span class="text">{{number}}</span>
        </li>
      {{/each}}
    </ul>

    <form class="new-number">
      <input type="text" name="number" placeholder="Type to add a number to this group" />
    </form>

  </li>
</template>

示例组文档如下:

{
  "_id": "pSpNcJKDPhRtGhtov",
  "name": "Sample Group",
  "createdAt": "2015-06-27T00:45:39.137Z",
  "owner": "t2ELweZsZqJXNQqdZ",
  "username": "brodan",
  "checked": false,
  "numbers": [
    {
      "number": "1234567",
      "checked": true
    }
  ]
}

当我点击deleteNumber按钮时,我需要能够从数字数组中删除一个特定的数字。我有以下javascript,无法弄清楚如何在MongoDB查询中使用父上下文:

Template.group.events({
    "click .deleteNumber": function () {
      Meteor.call("deleteNumber");
    }
  });

Meteor.methods({
  deleteNumber: function (numbers) {
    //Need to delete number from group via MongoDB query here.
  }
});

我知道我可以在deleteNumber方法中使用MongoDB查询中的$ pull运算符,但为了获得正确的组,我需要从模板中的数字中获取父数据。

感谢xamfoo的回答。

现在设置的工作deleteNumber方法如下:

deleteNumber: function (groupId, number) {
    Groups.update(groupId, {$pull: {numbers: {"number": number}}});
}

1 个答案:

答案 0 :(得分:2)

您应该能够通过this在事件处理程序和Template.instance().data组数据中获取上下文:

Template.group.events({
    "click .deleteNumber": function () {
      var data = Template.instance().data;
      Meteor.call("deleteNumber", data._id, this.number);
    }
  });

在这种情况下,deleteNumber的参数为:

Meteor.methods({
  deleteNumber: function (groupId, number) {
    //Need to delete number from group via MongoDB query here.
  }
});

您还可以使用Template.currentData()Template.parentData()

访问数据上下文