javascript - 找到对象但文档属性未定义

标签 javascript meteor

我正在使用 Meteor 和 Javascript 编写一个编程示例,但遇到了一个奇怪的问题。这是我的代码:

Items.allow({
  insert: function(userId, doc) {
    return (userId && doc.owner === userId);
  },
  update: function(userId, docs, fields, modifier) {
    console.log("------------");
    console.log(docs);
    return _.all(docs, function(doc) {
      console.log(doc);
      console.log(doc.name);
      console.log(doc._id);
      console.log(doc.owner);
      console.log(userId);
      return doc.owner === userId;
    });
  }
});

当我尝试使用 Javascript 控制台更新 Items 集合的一个对象时

Items.update({_id: "cY87rAW8g4f92bRY2"}, {$set: {price: "$20"}}); 

我在控制台中看到以下内容:

------------
{ name: 'two',
  owner: 'ZGXiBDBR6J5XdTHSe',
  _id: 'cY87rAW8g4f92bRY2' }
two
undefined
undefined
undefined
ZGXiBDBR6J5XdTHSe

第一次登录控制台“console.log(doc);”显示我正在更新正确的项目,但控制台日志的其余部分 doc.name、doc._id 和 doc.owner 未定义。这实际上会导致更新失败,因为我无法将 doc.owner 与 userId 进行比较。

最佳答案

由于 _.all 迭代数组或对象,并且更新是通过单个文档传递的,因此 _.all 迭代属性该文档的内容。

因此,当输出 two 时,这是 console.log(doc) 行的结果。未定义的输出是您尝试记录属性本身的属性。

因此,删除 block 的 _.all 包装器就可以了:

update: function(userId, doc, fields, modifier) {
  console.log(doc);
  console.log(doc.name);
  console.log(doc._id);
  console.log(doc.owner);
  console.log(userId);
  return doc.owner === userId;
}

关于javascript - 找到对象但文档属性未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15596868/

相关文章:

javascript - 无法访问上传的图像 - Meteor GridFS

javascript - 服务器端帐户创建错误

javascript - 使用 meteor 为 IE 有条件包含 js/css 文件

javascript - meteor apispark : unauthorized connection

javascript - `dir`中的 `console.dir`代表什么?

javascript - html/css/js 查找元素是否悬停在其他元素上

javascript - jqmobile listview中元素之间的间距相等

javascript - TheMeteorChef createUser 方法已经存在?

javascript - 计算 HTML5 视频的偏移量

javascript - Ajax.BeginForm 在页面中加载结果