【发布时间】:2015-03-02 16:06:23
【问题描述】:
我正在构建一个 Meteor 应用程序,并希望用户能够更新/设置他们的名称。我已经设置了代码,一切似乎都在工作,只是它在更新时神秘地失败了。这是我的代码:
模板
<template name="_editName">
{{#ionModal focusFirstInput=true customTemplate=true}}
<form id="updateName">
<div class="bar bar-header bar-stable">
<button data-dismiss="modal" type="button" class="button button-clear button-assertive">Cancel</button>
<h2 class="title">Update your name</h2>
<button type="submit" class="button button-positive button-clear">Save</button>
</div>
<div class="content has-header overflow-scroll list">
<label class="item item-input">
<input type="text" id="firstName" placeholder="Given Name">
</label>
<label class="item item-input">
<input type="text" id="lastName" placeholder="Surname">
</label>
</div>
</form>
{{/ionModal}}
</template>
客户端代码
Template._editName.events({
'submit #updateName': function(event, template) {
event.preventDefault();
console.log('Submitted');
var firstName = document.getElementById('firstName').value;
var lastName = document.getElementById('lastName').value;
Meteor.call('editName', firstName, lastName, function(error) {
if (error) {
throw new Error(error.reason);
} else {
Router.go('profile');
}
});
IonModal.close();
IonKeyboard.close();
}
});
服务器端代码
Meteor.methods({
'editName': function(firstName, lastName) {
console.log(firstName); // returns expected value
console.log(lastName); // returns expected value
Meteor.users.update({_id: this.userId}, {$set: {
'profile.firstName': firstName,
'profile.lastName': lastName
}});
Meteor.users.findOne({_id: this.userId}, {fields: {
'profile.firstName': 1, _id: 0}}); // returns undefined
}
});
一切正常:提交时,函数获取字段值,调用服务器上的方法,成功传递字段值。更新 似乎 正在工作,因为没有引发错误。但是,“profile.firstName”返回未定义并且没有显示在我的模板中。
我正在使用accounts-base 包和aldeed:collection2。我设置了以下架构:
Schema.UserProfile = new SimpleSchema({
firstName: {
type: String,
regEx: /^[a-zA-Z-]{2,25}$/,
optional: true
},
lastName: {
type: String,
regEx: /^[a-zA-Z]{2,25}$/,
optional: true
}
});
我完全不知道出了什么问题,我会感谢每一个帮助!
【问题讨论】:
-
Meteor.users.findOne({_id: this.userId}... 仅当执行此调用的用户已正确登录时才有效,否则 this.userID 将当然是空的。接下来是你通过
meteor mongo检查配置文件是否设置正确? -
另外,您不能在字段选项中混合包含 (1) 和排除 (0)。
-
@Meteorpoly 感谢您的快速回复!我正在使用accounts-base 包并且只是仔细检查:用户已正确登录,
console.log(this.userId)返回正确的用户ID。您的意思是在终端中运行meteor mongo吗?或者我该如何检查? -
好的,但是 mongodb 说什么,更新到数据库了吗?
-
@saimeunt 感谢您的提示,但您实际上可以: 例外情况是您可以在包含说明符中指定 _id: 0,这也会将 _id 排除在结果对象之外。 (Meteor docs).
标签: collections meteor updates