所以我有以下表格:
template(name='editUser')
.row
.col-md-4.col-md-offset-4
.page-header
h1 Edit user
form#edit-user-form
.form-group
label(for='name') Name
input#user-name.form-control(type='text' placeholder='Name' value='{{user.name}}')
.form-group
label(for='email') E-Mail
input#user-email.form-control(type='text' placeholder='E-Mail' value='{{getEmail user}}')
button.btn.btn-primary(type='submit') Update
以下handlebars.js-Helper:
Handlebars.registerHelper('getEmail', function (user) {
if (user.emails && user.emails[0] && user.emails[0].address)
return user.emails[0].address;
return '';
});
以及以下铁路由器代码:
EditUserController = RouteController.extend({
template: 'editUser',
waitOn: function () {
return Meteor.subscribe('user', this.params._id);
},
data: function () {
return {
user: Meteor.users.findOne( { _id: this.params._id } )
};
}
});
如果我运行我的应用程序并单击编辑用户表单的链接,我可以看到电子邮件地址。但是,如果我更改我的代码并且Meteor自动刷新页面,则电子邮件字段为空,控制台说,它无法获取未定义的值。
如果我使用相同的表单,但使用with-Helper,即使Meteor自动刷新页面,也会显示电子邮件:
template(name='editUser')
.row
.col-md-4.col-md-offset-4
.page-header
h1 Edit user
form#edit-user-form
with user
.form-group
label(for='name') Name
input#user-name.form-control(type='text' placeholder='Name' value='{{name}}')
.form-group
label(for='email') E-Mail
input#user-email.form-control(type='text' placeholder='E-Mail' value='{{getEmail this}}')
button.btn.btn-primary(type='submit') Update
为什么会这样?如果我得到单个结果(只显示一个结果),我是否应该总是使用with-Helper?
提前致谢!
答案 0 :(得分:1)
将Meteor.users.findOne
替换为Meteor.users.find
。
当findOne
找不到任何内容时,会返回undefined
,这会导致您的错误;当find
找不到任何内容时,它会返回一个空光标,Meteor知道该怎么做。基本上你通过添加with
所做的就是让Meteor检查值是否未定义,但是对于游标,空的或其他方式不需要检查。