我正在使用 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/