1

所以我有以下表格:

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?

提前致谢!

4

1 回答 1

1

替换Meteor.users.findOneMeteor.users.find

findOne没有找到任何东西时,它会返回undefined导致您的错误;当find没有找到任何东西时,它返回一个空游标,Meteor 知道如何处理。基本上,您通过添加所做的所有事情都是with让 Meteor 检查值是否未定义,但对于空游标或其他游标,该检查不是必需的。

于 2014-04-15T02:12:10.033 回答