2016-02-26 107 views
0

我跟隨流星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> 

回答

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}); 
    } 
}); 
+0

所以這基本上是一個強加的預防措施? – goelakash