【问题标题】:Updating a sub-document through meteor methods via a click function proving problematic通过点击功能通过流星方法更新子文档证明有问题
【发布时间】:2017-10-31 14:47:32
【问题描述】:

我有一个按钮 .toggle-addToSet 捕获两个整数,this.id 是当前帖子的 id,setid (sid) 是集合 Set_id,用户可以创建该集合他们想要多少就多少。目标是用this.id 更新给定_id sid 的选定Set。 js里面是这样的

Template.latestSingle.events({
  'click .toggle-addToSet': function(e, template) {
    var ob = this.id
    console.log(ob);
    var sid = $(e.currentTarget).data('setid');
    Meteor.call('addingSets', ob, sid, function(error, user) {
      console.log(ob)
    });
  }
});

发生了什么是ob 是数组中单个文档的id,这个文档是一个帖子,所以我正在捕获那个帖子。

在每个帖子上下文中都有一个模式,它会产生一个名为 Sets 的集合,该集合有一个名为 ArticleId 的子文档数组,用户可以通过插入 this.id @987654337 来更新它@ 通过点击功能与按钮toggle-addToSet 如上所示。

用户创建带有 BusinessLifestyle 等标题的 Set,当他们创建它时,他们可以将帖子 ID 保存在名为 ArticleId 的数组中每当他们找到想要添加的帖子时。想想 Pinterest BoardsG+ 合集

var sid = $(e.currentTarget).data('setid');是用户选择添加文章的每个Set的_id。

这个想法是通过 Set 的 _id sidthis.id (ob) 添加到所选的 Set 中。每套看起来像这样

所以我的方法是这样的

Meteor.methods({

    addingSets: function(set, sid, ob) {
        console.log(sid);
        console.log(ob);
        Sets.update({
      _id: sid
    },
    {
      $addToSet: {

        ArticleId: ob
      }
    });
    }
});

但是这不起作用,我似乎无法更新它。我可以通过表单手动输入,但是当通过点击功能更新它时,它不起作用。

当我在我的服务器中执行 console.log(sid); 时,我会在终端中获得正确的 Set _id
当我在我的服务器中执行console.log(ob); 时,我在终端中得到unidentified 的方法。但是在我的客户端中,它正在记录正确的 this.id,因此某处存在断开连接,我不确定如何处理。

【问题讨论】:

  • 一些错误。查看您的方法: function(set, sid, ob) { console.log(sid);控制台.log(ob);什么是设置参数?删除它。你用 ob + sid 调用,但方法需要 sib +ob。查看参数的顺序。
  • 谢谢! @iiro 这有效

标签: javascript meteor


【解决方案1】:

addingSets 方法中有一个额外的参数。

目前您在函数中定义了添加集:function(set, sid, ob)

当您从客户端调用它时,您会这样做:

Meteor.call('addingSets', ob, sid, function(error, user) {...}

请注意,该函数需要 3 个参数传递给它,而您只给它 2 个。因此,在您的情况下,ob 被映射到 setsid 被映射到 sid并且由于第三个参数没有被传递,它是未定义的。

助手:

Template.latestSingle.events({
  'click .toggle-addToSet': function(e, template) {
    var ob = this.id
    console.log(ob);
    var sid = $(e.currentTarget).data('setid');
    Meteor.call('addingSets', ob, sid, function(error, user) {
      console.log(ob)
    });
  }
});

服务器:

Meteor.methods({

    addingSets: function(ob, sid) {
        console.log(sid);
        console.log(ob);
        Sets.update({
      _id: sid
    },
    {
      $addToSet: {

        ArticleId: ob
      }
    });
    }
});

位置和传递的参数很重要。

【讨论】:

    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多