【问题标题】:Meteor: delete by text property not working流星:按文本属性删除不起作用
【发布时间】:2016-02-26 14:31:36
【问题描述】:

我正在关注流星tutorial,在添加表单以添加任务的同时,我还创建了一个表单以通过其文本值删除任务。

  Template.body.events({
    "submit .new-task": function (event) {
      // Prevent default browser form submit
      event.preventDefault();
      // Get value from form element
      var text = event.target.text.value;
      // Insert a task into the collection
      Tasks.insert({
        text: text,
        createdAt: new Date() // current time
      });
      // Clear form
      event.target.text.value = "";
    },
    "submit .delete-task": function (event) {
      // Prevent default browser form submit
      event.preventDefault();
      // Get value from form element
      var text = event.target.text.value;
      // Insert a task into the collection
      Tasks.remove({
        text: text,
      });
      // Clear form
      event.target.text.value = "";
    }
  });
}

new-task 表单工作正常,但 delete-task 表单不起作用。我使用 shell (meteor mongo) 尝试了一个类似的查询,它成功了。我这里有什么错误?

编辑: 这里也是html:

<head>
  <title>Todo List</title>
</head>
<body>
  <div class="container">
    <header>
      <h1>Todo List</h1>
        <form class="new-task">
        <h2> Add a task </h2>
          <input type="text" name="text" placeholder="Type to add new tasks" />
        </form>
        <form class="delete-task">
        <h2> Delete a task </h2>
          <input type="text" name="text" placeholder="Type to delete tasks" />
        </form>
    </header>
    <ul>
      {{#each tasks}}
        {{> task}}
      {{/each}}
    </ul>
  </div>
</body>
<template name="task">
  <li class="{{#if checked}}checked{{/if}}">
    <button class="delete">&times;</button>
    <input type="checkbox" checked="{{checked}}" class="toggle-checked" />
    <span class="text">{{text}}</span>
  </li>
</template>

【问题讨论】:

    标签: javascript node.js forms mongodb meteor


    【解决方案1】:
    Uncaught Error: Not permitted. Untrusted code may only remove documents by ID. [403]
    

    当您尝试按您在代码/问题声明中描述的文本删除时,这会显示在浏览器的 javascript 控制台中。这是 Meteor 团队在 0.5.8 中的设计决定,并在 in this previous question 进行了讨论。

    如果您创建一个server side method,您就可以拥有此功能。否则您的客户端代码将不得不按 ID 删除。像这样的:

    在客户端代码上将您的 Tasks.remove({text: text}) 调用更改为 Meteor.call('removeTaskByText', text),并在服务器端定义:

    Meteor.methods({
      'removeTaskByText': function(text){
        Tasks.remove({text: text});
      }
    });
    

    【讨论】:

    • 所以这基本上是一种强制预防措施?
    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2016-01-19
    • 2018-02-04
    相关资源
    最近更新 更多