删除Meteor.js中的类别

时间:2014-01-14 16:35:25

标签: javascript meteor

我正在Meteor中写一个小应用程序。我完成了添加类别的代码,但我不知道如何删除类别。 我在HTML中的代码是:

<template name="categories">
<h2>Stored Category</h2>
<div id="categories" class="btn-group">
    {{#if new_cat}}
        <div id="category">
            <input type="text" id="add-category" value=""/>
        </div>      
    {{else}}            
        <div class="category btn btn-inverse" id="btnNewCat">&plus;</div>
    {{/if}}

    {{#if del_cat}}
        <div id="category">
            <input type="text" id="del-category" value=""/>
        </div>      
    {{else}}            
        <div class="category btn btn-inverse" id="btnDelCat">&minus;</div>
    {{/if}}

    {{#each lists}}
        <div class="category btn btn-inverse">
            {{Category}}
        </div>
    {{/each}}
</div>

添加类别的按钮显然是btnNewCat,删除是btnDelCat。 Javascript代码是:

    Template.categories.lists = function () {
    return lists.find({}, {sort: {Category: 1}});
};

Session.set('adding_category', false);
Session.set('deleting_category', false);

Template.categories.new_cat = function () {
    return Session.equals('adding_category',true);
};

Template.categories.del_cat = function(){
    return Session.equals('deleting_category',true);
};

Template.categories.events({
    'click #btnNewCat': function (e, t) {
        Session.set('adding_category', true);
        Meteor.flush();
        focusText(t.find("#add-category"));
    },
    'keyup #add-category': function (e,t){
        if (e.which === 13)
        {
            var catVal = String(e.target.value || "");
            if (catVal)
            {
                lists.insert({Category:catVal});
                Session.set('adding_category', false);
            }
        }
    },
    'focusout #add-category': function(e,t){
        Session.set('adding_category',false);
    },

    'click #btnDelCat': function (e, t) {
        Session.set('deleting_category', true);
        Meteor.flush();
        focusText(t.find("#del-category"));
    },
    'keyup #del-category': function (e,t){
        if (e.which === 13)
        {
            var catVal = String(e.target.value || "");
            if (catVal)
            {
                alert(catVal);
                lists.remove({Category:catVal});
                Session.set('deleting_category', false);
            }
        }
    },
    'focusout #del-category': function(e,t){
        Session.set('deleting_category',false);
    }

我尝试使用 lists.remove({Category:catVal}); 删除。这是行不通的。我做错了什么?

谢谢,

eb_cj

1 个答案:

答案 0 :(得分:2)

您只能通过_id删除客户端中的项目,因此您需要执行以下操作:

var removeCat = lists.findOne({Category:catVal});
if (removeCat) lists.remove(removeCat._id);

在浏览器控制台中尝试这些内容应该表明您的代码原则上是否有效;如果您尝试lists.remove({Category:catVal}),它应该会给您:

  

错误:不允许。不受信任的代码只能按ID删除文档。 [403]

但上面的代码应该有效。