这是非常简单的实现,但我的语法可能存在一些问题:
Template.userProfilePage.events({
'submit #profile-page': function(event, template) {
event.preventDefault();
var name = template.find('#fullName').value,
address = template.find('#address').value,
company = template.find('#company').value,
otherField = template.find('#other').value;
alert(name);
Meteor.users.update(
{ _id:Meteor.user()._id },
{
$set: {
"profile.name":name,
"profile.address":address,
"profile.company":company,
"profile.other":other
}
},
{ upsert: true },
{ multi: true }
);
return false;
}
});
模板包含普通的html页面。它总是抛出错误:
RangeError: Maximum call stack size exceeded.
答案 0 :(得分:1)
如果您只更新一个用户,则无需multi: true
。也应该永远不需要坚持;如果您正在使用已登录的用户,则users
集合中应始终有一个文档。尝试这样的事情:
Meteor.users.update(
Meteor.userId(),
{$set: {
"profile.name": name,
"profile.address": address,
"profile.company": company,
"profile.other": other
}
}
);
另请确保您的allow
和deny
规则允许您进行此更新。
P.S。我怀疑你的错误信息可能是因为{ multi: true }
是.update
的第四个参数。根据{{3}},语法为collection.update(selector, modifier, [options], [callback])
;因此,如果您想同时使用multi
和upsert
,请将它们合并到第三个参数中的一个对象中:{ multi: true, upsert: true }
(您也可以使用collection.upsert
代替{.update
1}})。您的错误可能是由于您发送了一个对象{ multi: true }
作为第四个参数而不是update
所期望的回调函数。