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

时间:2015-08-19 01:15:59

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

1 个答案:

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