我有一个名为Rulesets的集合 - 每个规则集都有一个“规则”数组。我有以下html显示每个规则集和每个规则:
<template name="rulesets">
{{#each rulesets}}
{{>rulesetSingle}}
{{/each}}
</template>
<template name="rulesetSingle">
{{#each rules}}
<p class="rule-description">{{this}}
<a href="#" class="rule-delete-btn">x</a>
</p>
{{/each}}
</template>
我希望能够在用户点击“rule-delete-btn”时删除该规则 我有以下javascript来执行此操作:
Template.rulesetSingle.event({
'click .rule-delete-btn': function(e){
e.preventDefault();
var array = Rulesets.rules;
var index = array.indexOf(this);
array.splice(index, 1);
}
});
删除无效,因为“数组”声明未提取有效数组。如何找到并存储包含“this”的数组,这是当前需要删除的规则?
答案 0 :(得分:3)
假设您的Rulesets.rules
数组是一个对象数组,如:
Rulesets : { { title: 'title1',
rules : [ {name : 'rule1', description : 'description1'},
{name : 'rule2', description : 'description2'}
]
},
{ title: 'title2',
rules : [ {name : 'rule1', description : 'description1'},
{name : 'rule2', description : 'description2'}
]
} }
首先,在您的rulesetSingle
模板中,您必须将该特定文档的_id
分配给<a>
,如:
<a href="#" name="{{../_id}}"class="rule-delete-btn"> x </a>
第二件事,您尝试使用Array.splice()
删除规则条目,这是不可能的,因为rules
是集合中的文档。您必须update
查询Rulesets.update()
。
如果您已在服务器上完成allow update
,则可以从事件处理程序中删除此数组条目,否则必须通过Meteor.call()
rule
传递_id
'click .rule-delete-btn': function(e) {
e.preventDefault();
var rule = this;
var id = e.currentTarget.name;
Meteor.call('removeRule', id, rule);
}
父文件。
因此,事件处理程序将类似于:
Meteor.methods({
removeRule: function(id, rule){
Rulesets.update({_id: id}, {$pull : {rules : rule}});
}
});
在服务器上:
{{1}}