gpt4 book ai didi

javascript - 模板助手没有准备好,尽管它应该准备好

转载 作者:行者123 更新时间:2023-11-30 17:27:50 24 4
gpt4 key购买 nike

很难为这个问题想出一个好的标题...

错误

我遇到了一些导致错误的奇怪问题:

Uncaught TypeError: Object #<Component> has no method 'someHelper'

即使我明确检查模板助手“someHelper”是否准备就绪。奇怪的是,这发生在由于代码更改导致 meteor 重新启动时(如果我手动停止并启动 meteor,则不会)。该错误只发生一次,如果我刷新页面,一切都会按预期进行。我在 Chrome 和 Firefox 中测试过,行为相同。

代码

让我解释一下(下面的所有代码都在 client.js 中):

我有一些绘图代码需要模板 someTemplate 中的一个 div 来将图表呈现给 (Highcharts API)。绘图是在模板助手 Template.someTemplate.someHelper() 中完成的。

情节应该 react 性地更新所以我有这样的东西

Deps.autorun(function () {
// ... some code

// I am expecting the template not to be ready so I use a session variable to check
if (Session.get("someTemplateRendered")){
// The check above should be sufficient but after experiencing the error I added an
// additional check
if (typeof Template.someTemplate.someHelper != undefined){
Template.historychart.someHelper(); // this is the line with the error (sometimes)
}
}
});

要设置 session 变量,我会这样做:

Template.someTemplate.rendered = function() {
Session.set("someTemplateRendered", true);
// (nothing else in this rendered callback)
};

更奇怪的是,如果我在发生错误的行暂停执行并执行

typeof Template.someTemplate.someHelper

在 JS 控制台中,我得到:"undefined"

这怎么可能?我正在明确检查 Template.someTemplate.someHelper 是否未定义!

我没有想法,很乐意提出一些建议。

最佳答案

未定义blahtypeof blah的返回值是字符串"undefined",而不是值undefined。事实证明 undefined == "undefined" 是错误的。

// in a Javascript console, where there is no variable 'qwerty'
typeof qwerty != undefined
// > true
typeof qwerty != "undefined"
// > false

顺便说一下,Session 变量是通过热代码重载来保存的,所以在 HCR 之后,即使 someTemplate 没有,Session.get("someTemplateRendered") 仍然为真。尚未渲染,只要它在 HCR 之前渲染。这就是为什么当页面因 HCR 而重新加载时自动运行会立即触发。

一个问题:为什么还要考虑 Session 变量和自动运行?这有什么问题吗?

Template.someTemplate.rendered = function() {
// Set up the chart
}

模板助手并不是该函数的合适位置;模板助手通常没有副作用,通常仅由模板(或有时其他助手)调用。

关于javascript - 模板助手没有准备好,尽管它应该准备好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23867421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com