【问题标题】:Meteor - Error when loading/refreshing page: Exception from Tracker afterFlush function: undefinedMeteor - 加载/刷新页面时出错:来自 Tracker afterFlush 函数的异常:未定义
【发布时间】:2018-03-15 04:42:00
【问题描述】:

如上所述,我收到一个错误并显示一个空页面(但包含导航栏的布局在那里)。当我通过浏览器刷新链接或直接通过浏览器访问链接时,总是会出现此错误。当我使用导航栏浏览模板时,一切都很好。因此,在页面真正“加载”后,我看不到任何数据。

我在 Windows 上使用 Meteor Blaze。

这是一个截图:

没有显示图片,也没有显示其他数据。

我不确定,如果这 100% 是这种行为的原因,但总是如果发生这种行为,我会在客户端控制台中收到以下错误消息:

来自 Tracker afterFlush 函数的异常:未定义

TypeError:无法读取未定义的属性“用户名” 在 Blaze.TemplateInstance。 (http://localhost:3000/app/client/templates/common/navigation.js?hash=142e989d312ba94a4b875a71e5e557bdd5255272:3:40) 在http://localhost:3000/packages/blaze.js?hash=f33d3dfed63a491d24e3aa07ad66c24b5fe8c761:3398:22 在 Function.Template._withTemplateInstanceFunc (http://localhost:3000/packages/blaze.js?hash=f33d3dfed63a491d24e3aa07ad66c24b5fe8c761:3744:12) 在 fireCallbacks (http://localhost:3000/packages/blaze.js?hash=f33d3dfed63a491d24e3aa07ad66c24b5fe8c761:3394:12) 在 Blaze.View。 (http://localhost:3000/packages/blaze.js?hash=f33d3dfed63a491d24e3aa07ad66c24b5fe8c761:3487:5) 在http://localhost:3000/packages/blaze.js?hash=f33d3dfed63a491d24e3aa07ad66c24b5fe8c761:1845:14 在 Object.Blaze._withCurrentView (http://localhost:3000/packages/blaze.js?hash=f33d3dfed63a491d24e3aa07ad66c24b5fe8c761:2271:12) 在http://localhost:3000/packages/blaze.js?hash=f33d3dfed63a491d24e3aa07ad66c24b5fe8c761:1844:15 在 Object.Tracker._runFlush (http://localhost:3000/packages/tracker.js?hash=997515fa2d5b0530ba07741da556c4b36963ef3b:548:11) 在 onGlobalMessage (http://localhost:3000/packages/meteor.js?hash=6d285d84547b3dad9717a7c89c664b61b45ea3d8:398:23) 未定义

我搜索了跟踪器、afterFlush 等,但我不确定我必须在我的代码中更改什么?

【问题讨论】:

    标签: javascript node.js meteor routes meteor-blaze


    【解决方案1】:

    当您“新鲜”加载此路由(使用刷新或将 url 粘贴到浏览器中)时,Meteor 会重新加载整个应用程序包括Meteor.user() 对象。在client/templates/common/navigation.js 的第40 行,您可能正在尝试访问Meteor.user().username,但Meteor.user() 尚未加载,因此您收到错误消息。您需要在您的代码中防范这种情况和/或显示加载模板,直到您的订阅和用户对象都准备好。

    错误转储的第一行指向错误:

    TypeError: Cannot read property 'username' of undefined at Blaze.TemplateInstance.
    (http://localhost:3000/app/client/templates/common/navigation.js?hash=142e989d312ba94a4b875a71e5e557bdd5255272:3:40)
    

    末尾的:40 是发生错误的行号。

    【讨论】:

    • 完美,解决了!我刚刚在使用导航栏的每条路线上添加了一个 WaitOn 功能(因此需要Meteor.user())。函数看起来像:Router.route('myRoute', { waitOn: function () { Session.set('me', Meteor.user().username); }, action: function () { this.render('myRouteTemplate'); } });。所以,你是绝对正确的,这是一个关于 Meteor.user().username 的问题,它还没有准备好。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2016-04-01
    • 2017-03-21
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2013-08-02
    相关资源
    最近更新 更多