javascript - 防止插入重复元素 - 而不是路由到现有元素

标签 javascript mongodb meteor

这就是我通过输入字段向列表(包含文章链接)添加一些元素的方式:

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),而不是添加标题到列表中。

最佳答案

假设您正在使用iron:router并且有这样的路线:

Router.route('article/:_id', {
    name: 'article'
    // other route stuff
});

您可以按如下方式调整代码:

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 = "";
      }
    }
  });

请注意,如果用户绕过此代码(即通过从控制台执行插入),这不会阻止重复。

如果您使用 Collection2 和 SimpleSchema,则可以在标题字段上设置唯一约束,以确保仅插入唯一值,无论插入发生在何处。为此,只需在字段定义中指定“unique: true”,如下所示:

title : {
   type: String,
   unique: true
}

关于javascript - 防止插入重复元素 - 而不是路由到现有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32085022/

相关文章:

Javascript 对象属性不会在每次访问时更新

javascript - 条件可拖动 jQuery UI

javascript - "Exited with code 8" meteor 应用示例

cordova - 带有phonegap/cordova的 meteor

javascript - 有人成功地在 Meteor 中创建了键绑定(bind)吗?

javascript - 如何在 python 中模拟 onclick 事件?

java - 其他网站地址与 url 不匹配

mongodb - MongoDB 聚合 $project 是否会减少内存中保存的数据量?

javascript - Mongoose 根据另一个字段值隐藏/显示字段

node.js - Mongoose findOne() 不返回 Promise