这是我通过输入字段将一些元素添加到列表(包含文章的链接)的方式:
Template.addForm.events({
'submit form': function(event){
event.preventDefault();
var title = event.target.text.value;
MongoValues.insert({
title: title,
slug: title.toLowerCase()
}, function(error, result) { if(error) console.warn(error); });
event.target.text.value = "";
}
});
现在我想阻止双重输入:如果用户想要添加已存在的标题,则应将其路由到此已存在的元素(路由到article/_id
),而不是将标题添加到列表中。 / p>
答案 0 :(得分:0)
假设您使用的是铁路由器并且有这样的路由:
HttpURLConnectionExample httpURLConnectionExample = new HttpURLConnectionExample();
您可以按如下方式调整代码:
Router.route('article/:_id', {
name: 'article'
// other route stuff
});
请注意,如果用户绕过此代码(即通过从控制台执行插入操作),这不会阻止重复。
如果您使用的是Collection2和SimpleSchema,则可以在title字段上设置唯一约束,以确保只插入唯一值,无论插入位于何处。要做到这一点,只需指定" unique:true"在您的字段定义中,如下所示:
Template.addForm.events({
'submit form': function(event){
event.preventDefault();
var title = event.target.text.value;
var existing = MongoValues.findOne({title : title});
if (!!existing) {
// title already exists, go to article page
Router.go("article", {_id : existing._id});
} else {
// title doesnt exist, so go ahead and insert
MongoValues.insert({
title: title,
slug: title.toLowerCase()
}, function(error, result) {
if(error) {
console.warn(error);
}
});
event.target.text.value = "";
}
}
});