Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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.user().profile仅在页面刷新后定义_Javascript_Meteor - Fatal编程技术网

Javascript Meteor.user().profile仅在页面刷新后定义

Javascript Meteor.user().profile仅在页面刷新后定义,javascript,meteor,Javascript,Meteor,我有一个名为“isActive”的助手和一个名为“create”的模板。。见下文 Template.create.isActive = function () { return Meteor.user().profile.isActive; }; 当我尝试运行此代码时,它会在控制台中返回以下内容:“模板助手中的异常:TypeError:无法读取未定义的属性'profile' 我通过使用iron router等待配置文件加载来解决此问题: //startup on server side:

我有一个名为“isActive”的助手和一个名为“create”的模板。。见下文

Template.create.isActive = function () {
  return Meteor.user().profile.isActive;
};
当我尝试运行此代码时,它会在控制台中返回以下内容:“模板助手中的异常:TypeError:无法读取未定义的属性'profile'

我通过使用iron router等待配置文件加载来解决此问题:

//startup on server side:
Meteor.publish("userData", function() {
  if (this.userId) {
    return Meteor.users.find({_id: this.userId},
      {fields: {'profile.isActive': 1}});
  } else {
    this.ready();
  }
});

//startup on client side
Meteor.subscribe('userData');

//router
this.route('create', {
  path: 'create',
  waitOn : function () {
    return Meteor.subscribe('userData');
  },
  data : function () {
    return Meteor.users.findOne({_id: this.params._id});
  },
  action : function () {
    if (this.ready()) {
      this.render();
    }
  }
});
但是。。。它只在刷新页面时起作用,而不是在初始加载时起作用。有人知道为什么会这样吗?是否有修复方法或更好的方法来执行此操作?

要避免错误“模板帮助程序中的异常:类型错误:无法读取未定义的属性“profile”,您需要检查Meteor.user()是否返回了对象。标准模式是:

Template.create.isActive = function () {
  var user = Meteor.user();
  return user && user.profle.isActive;
};
一旦您的助手抛出错误,反应性将不起作用,因此您需要确保处理订阅数据尚未到达的情况


此外,等待“userData”订阅将延迟模板加载,但用户配置文件将在登录时自动发布(作为空订阅)。因此,您的等待会导致任意延迟,这会增加Meteor.user()被定义的可能性,但它不会直接等待您需要的数据。

我仍然有点卡住了。。首先,我似乎不需要铁路由器,其次,当我尝试实现它时,它解决了问题,但创建了一个新的。。。不再呈现“Template.create.rendered=function()”。知道如何解决这个问题吗?渲染函数是否在DOM中操纵某些东西?如果未调用,则应报告该错误。更有可能的是,它被调用了,但没有达到预期的效果。不确定这与上述问题有多大关系,因此可能需要启动另一个线程。