我有一个群组的模板。每个组文档都包含一个数组,每个元素包含一个数字和一个布尔值。模板布局如下:
<template name="group">
<li class="{{#if checked}}checked{{/if}} groupBox">
<button class="delete">×</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">×</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}}});
}
答案 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()