【问题标题】:iron-router waitOn Meteor.user()铁路由器 waitOn Meteor.user()
【发布时间】:2014-10-09 21:11:10
【问题描述】:

我会在 data Iron-router 中使用 Meteor.user(),但是这在开始时是未定义的...

我正在尝试:

waitOn: function() {
   return curretUserHandle;
},
data: function() {
   // access to Meteor.user().username, give me undefined

[...]

var curretUserHandle = {
    ready: function () {
        return 'undefined' !== typeof Meteor.user();
    }
};

但是路由的data函数总是在curretUserHandle.ready() return true之前调用

我知道我可以在data中添加if(Meteor.user()),但是这个选项不喜欢。

为什么 data 不等待 Meteor.user() 准备好?

【问题讨论】:

  • 你有Router.onBeforeAction('loading')吗?没有它,waitOn 不会等待。
  • 是的@PeppeL-G,我有:loadingTemplate: 'Loading'Router.onBeforeAction('loading');... 只有当用户直接进入路由或刷新页面 (F5) 时才会出现问题
  • 我很好奇你为什么要把问题搞得这么复杂。我很确定您只需要return !!Meteor.user()
  • ehehe...你有正确的@apendua。我已经从另一个地方复制并粘贴了,我没有注意代码......但问题仍然存在:(
  • @elbowz 嗯,这很神秘。

标签: javascript meteor iron-router


【解决方案1】:

只能作为解决方法:

if(this.ready())

data函数中

【讨论】:

  • 我的情况是 this.ready() 在没有订阅数据的情况下返回 true。检查输入控制台后,数据无处可去。铁:路由器有太多神奇的问题。
【解决方案2】:

添加https://atmospherejs.com/meteorhacks/fast-render '神奇地' 解决了这个问题。

但是,请阅读有关必要安全措施的说明: https://meteorhacks.com/fast-render/security-measures/

【讨论】:

  • 我相信它只解决了在第一页刷新时运行的 Iron-router 初始化代码和检查用户登录数据之间的竞争条件。使用 waitOn 时,其他反应变量对我来说效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多