【问题标题】:Meteor : remove is not a function流星:删除不是一个功能
【发布时间】:2016-04-18 17:11:45
【问题描述】:

我想创建全局函数来从 Meteor 中的收藏中删除一个项目。

我的代码:

Template.adminLayout.events({
    'click .delete': function(e) {

        var collection = $(e.target).data('collection'),
            redirect = $(e.target).data('redirect'),
            id = this._id;

        // Remove request
        collection.remove(id);

        // Redirect
        Router.go(redirect);

    }
});

使用collection.remove(id),我收到此错误:

collection.remove 不是函数

如果我使用 Messages(我的收藏名称)Messages.remove(id) 进行测试,它可以工作。

你知道为什么我的代码不起作用吗?

【问题讨论】:

  • 当您在调试器中或通过控制台检查 collection 时,它的类型是什么?
  • 嗨杰米克。集合返回“字符串”。
  • 嗯,这就是你的答案。 javascript 中的字符串不包含函数remove!那么下一个问题是,你如何填充.data('collection')
  • 我想在数据上添加我的“动态集合”:<a href="#" class="delete" data-collection="Messages" data-redirect="messageListAdmin">Delete</a> 编辑:没关系,我添加了 collection = eval(collection); 并且它有效!谢谢贾米克!
  • 这是一个糟糕的解决方案,(可能)向黑客开放您的网站。如果它是一个全局对象,至少将其更改为 collection = window[collection],或者最好不要将 Messages 存储在全局范围内。

标签: javascript meteor


【解决方案1】:

您的collection 参数是带有集合名称的字符串,而不是集合本身。您需要实际的集合对象来执行数据操作。如果您希望能够按名称访问集合,则需要自己准备字典。例如:

Collections = {};

Collections['Documents'] = Documents = new Mongo.Collection('documents');

然后你可以在你的事件处理程序中使用它:

var collection = Collections[$(e.currentTarget).data('collection')];

顺便说一句,使用e.currentTarget 而不是e.target 是一种很好的做法。它总能得到你期望的元素,而e.target 可以是它的后代之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多