【问题标题】:Accessing Parent Data in a Meteor Template Helper在 Meteor 模板助手中访问父数据
【发布时间】:2015-06-27 01:06:18
【问题描述】:

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

<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 按钮时,我需要能够从 numbers 数组中删除特定数字。我有以下 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.
  }
});

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

感谢 xamfoo 的回答解决了。

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

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

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    您应该能够通过事件处理程序中的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() 访问数据上下文。

    【讨论】:

    • 这工作完美无缺。非常感谢你的帮助。我知道有一些方法可以在模板处理程序中获取上下文,而不仅仅是在模板中,但我无法弄清楚。
    猜你喜欢
    • 2013-02-14
    • 2016-06-10
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2015-03-28
    • 2016-03-02
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多