Meteor textarea 将内容保存到 collection

Meteor textarea saving content to collection

我正在制作此网页,您可以在其中创建一个 canvas,其中包括图表上的标题和不同部分。在主页上单击 "create new canvas",它会调用一个模式,您可以在其中输入 canvas 的标题并将其添加到 collection。所有 canvases 都显示在此主页上。这个功能有效!

当您单击特定 canvas 时,它会转到一个新页面,该页面会显示您选择的 canvas 的标题和供您填写的图表。 (问题和解决方案只是图表众多部分中的两个)。目前,标题显示正确,但我在使用文本区域时遇到问题。文本区域的内容不会保存,当您刷新页面时,所有内容都会被删除。

{{title}}
<form class="js-fill-canvas">
Problem: <textarea placeholder="Top 3 problems" name="problem">{{problem}}</textarea>
Solution: <textarea placeholder="Top 3 features" name="solution">{{solution}}</textarea> 
</form>

Template.canvas_add_form.events({
  'submit .js-add-canvas':function(event){
   var title;
   title = event.target.title.value;

   Canvas.insert({
      title:title,
      createdOn: new Date(),
      createdBy: Meteor.user()._id
   });
   $("#canvas_add_form").modal('hide');
   return false;
   }
});

Template.canvas_edit.events({
   'submit .js-fill-canvas':function(event){ 
    var problem, solution;
    problem = $(event.target).val();
    solution = $(event.target).val();

    Canvas.insert({
       problem:problem,
       solution:solution
    });
    return false;
    }
});

canvas_add_form 和 canvas_edit 之间的唯一区别是添加表单使用输入而不是文本区域。第二次插入collection不正确吗?

回答你的问题,是的,插入两次是一个问题,因为你随后将文本区域数据保存到一个全新的记录中(这似乎没有意义)。

相反,您应该像这样更新您的记录。

Template.canvas_edit.events({ 
  'submit .js-fill-canvas': function(event) { 
    var problem, solution;
    problem = event.target.problem.value; 
    solution = event.target.solution.value;

    Canvas.update(this._id, {
      $set: {
        problem: problem, 
        solution: solution 
      }
    }); 

    return false; 
  }
});

这里的一些关键事情是 this 包含模板中的数据上下文(因此我们可以获得我们的 _id)并且您可以直接从 event.target

访问表单元素

问题已解决!我需要在第一次创建对象时将对象内的所有变量设置为未定义。之后更新对象时,我可以将 textarea 值设置为空变量。这是工作代码:

{{title}}
<form class="js-fill-canvas">
Problem: <textarea placeholder="Top 3 problems" id="problem">{{problem}}</textarea>
Solution: <textarea placeholder="Top 3 features" id="solution">{{solution}}</textarea> 
</form>

Template.canvas_add_form.events({
  'submit .js-add-canvas':function(event){
   var title, problem, solution;
   title = event.target.title.value;

   Canvas.insert({
      title:title,
      problem: undefined,
      solution: undefined,
      createdOn: new Date(),
      createdBy: Meteor.user()._id
   });
   $("#canvas_add_form").modal('hide');
   return false;
   }
});

Template.canvas_edit.events({
   'submit .js-fill-canvas':function(event){ 

    problem = $('textarea#problem').val();
    solution = $('textarea#solution').val();

    Canvas.update(this._id,{ 
       $set: {
       problem:problem,
       solution:solution
       }
    });
    return false;
    }
});