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 '';
  });

および次の iron-Router コード:

    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 } )
        };
      }
});

アプリケーションを実行し、edit-User-Form へのリンクをクリックすると、電子メール アドレスが表示されます。しかし、コードを変更し、Meteor がページを自動的に更新すると、E-Mail-Field は空になり、コンソールは 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

これはなぜですか?単一の結果 (表示する結果が 1 つだけ) を取得する場合、常に with-Helper を使用する必要がありますか?

前もって感謝します!

4

1 に答える 1

1

に置き換えMeteor.users.findOneますMeteor.users.find

findOne何も見つからない場合はundefined、エラーの原因となるエラーが返されます。何も見つからない場合findは、Meteor が何をすべきかを知っている空のカーソルを返します。基本的に、追加によって行っていたwithのは、Meteor に値が未定義かどうかをチェックさせることだけでしたが、そのチェックはカーソルが空であるかどうかに関係なく必要ありません。

于 2014-04-15T02:12:10.033 に答える