Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我在Meteor中重新加载页面后会收到未定义的值?_Javascript_Meteor_Spacebars - Fatal编程技术网

Javascript 为什么我在Meteor中重新加载页面后会收到未定义的值?

Javascript 为什么我在Meteor中重新加载页面后会收到未定义的值?,javascript,meteor,spacebars,Javascript,Meteor,Spacebars,因此,我有以下表格: 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' placeh

因此,我有以下表格:

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
以下是handlebar.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


提前谢谢

Meteor.users.find
替换
Meteor.users.find


findOne
没有找到任何内容时,它返回
undefined
,这将导致您的错误;当
find
找不到任何东西时,它返回一个空光标,Meteor知道如何处理它。基本上,您通过添加
所做的全部工作就是让Meteor检查值是否未定义,但无论光标是否为空,该检查都不是必需的。

非常感谢您的回答!因此建议使用find()而不是findOne。你能告诉我什么时候应该使用find()和什么时候应该使用findOne()吗?提前谢谢!您可以在任何地方使用
findOne
,通常比
find
更方便;只需知道,当您使用它时,您需要检查它在找不到任何内容时返回未定义的
的可能性。在这种特殊情况下,
每一个
在发送未定义的
时都会抱怨,但在发送空光标时则不会抱怨,因此使用
查找
更容易。您也可以使用
findOne
,但在将结果返回到
each
之前,请检查它是否为
undefined
,并将结果值从
undefined
更改为
[]
(空数组)以避免错误。另外请注意,在使用
find
时,如果您确实只需要一个结果,您应该向查询中添加
limit:1
,除非您知道它永远不会返回多个(例如,您正在搜索
\u id
)。