Итак, у меня есть следующая форма:
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 автоматически обновит страницу, поле электронной почты будет пустым, а консоль скажет, что не может получить значение undefined.
Если я использую ту же форму, но с 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, если я получаю одиночные результаты (только один результат для отображения)?
Заранее спасибо!