问题标签 [meteor-tracker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3791 浏览

javascript - Meteor - 当模板被销毁时停止跟踪器自动运行(用户离开页面)

在我的 Meteor 模板中,我有一个函数ohlcInit(),当 Mongo 中有新数据可用时,它会自动运行:

当用户在定义了这一切的页面/模板上时,这很有效,但是一旦用户导航到站点上的另一个 URL 并且模板被破坏,控制台中就会抛出错误:

跟踪器重新计算函数的异常:未定义不是函数类型错误:未定义不是 ohlcInit 的函数(http://localhost:3000/client/views/live/live.js?dd5fb618daf9ea9e233c37caaaa9ed200fe3e987:271:33)在http:// localhost:3000/client/views/live/live.js?dd5fb618daf9ea9e233c37caaaa9ed200fe3e987:306:5 在 Tracker.Computation._compute ( http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1574f:28 ) ._recompute ( http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1574f:302:14 ) 在 Tracker.flush ( http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1 ) 561f6f8fd1 )

当用户导航到新的 URL/模板时,如何安全地停止/结束自动运行计算?
我正在使用iron:router.

0 投票
1 回答
210 浏览

javascript - 如何在静态非 Meteor 页面中使用 Tracker.autorun?

我网站的一些页面是服务器端渲染的,所以通常的 Meteor JavaScript 包对他们不可用。

我们希望缩小页面大小,但Tracker.autorun用于轻量级反应性,我们如何使用 Meteor a-la-carte 呢?

0 投票
1 回答
795 浏览

meteor - Meteor:Tracker.autorun 和 dep.changed 导致无限循环

我正在使用新的 Tracker.Dependency 来跟踪几件事,但它会导致下面代码中的自动运行无限运行。怎么了?一旦我将 getSong 和 getSongId 分开以依赖于 dep 和 dep2,而不是仅仅依赖于 dep,下面的代码就可以了。

0 投票
1 回答
618 浏览

templates - Blaze 视图和模板之间有什么关系?

我了解 Blaze 用于通过使用 Tracker 使模板反应。我知道一个模板包含许多 View 对象,每个模板元素之一。

视图是“反应模板的构建块”并且“代表 DOM 的反应区域”。并且(来自文档), View 可以对应于“当前模板助手、事件处理程序、回调或自动运行”。

但我很困惑究竟什么是 View 对象,以及 Blaze View 如何,Template.mytemplate.helpers()Template.mytemplate.autorun(). 例如,每个辅助函数是否对应一个 View 对象?还是仅当函数包含响应式数据源时?该autorun方法是针对整个模板的,一个View如何与一个包含多个View对象的整个模板关联呢?

0 投票
1 回答
190 浏览

meteor - 新数据可用时重新初始化库

我目前正在开发一个使用 video.js-Library 的 Meteor 应用程序。

我有以下模板:

渲染模板后初始化 video.js-Library 工作正常。

但是,如果使用不同的视频(使用不同的 RichMediaContent)呈现相同的模板,则不会重新初始化 videojs-Library。

我已经尝试将视频部分移动到自己的模板中并将其包含在 foo-Template 中,以便每次加载新视频时都应该调用 onRendered-Call。但这似乎不起作用。

如果视频发生变化,您知道如何重新初始化库吗?

提前致谢!

0 投票
1 回答
33 浏览

meteor - 流星跟踪器意外跳过

我正在关注有关 Tracker 的教程并看到意外行为。

在这里,我使用 getter 和 setter 来查看Tracker.autorun()每当我调用 setter 时都会调用它。

当我打开浏览器控制台时,我希望看到

但我看到的只是第一个和最后一个,不管我打了多少电话setFavoriteFood()

为什么会这样?

0 投票
1 回答
179 浏览

javascript - Tracker:为什么在无效时删除计算?

我正在阅读跟踪器手册并且很难理解某些内容。

我知道这dependency.changed()将使依赖项中的所有计算无效,导致跟踪器重新运行。

但是为什么 Meteor 在失效时会从依赖中删除计算呢?

例如,这是手册中的 Tracker 示例:

为什么我们要添加Tracker.currentComputation.onInvalidate()回调以从依赖项中删除计算?对我来说似乎没有必要。

我想完全理解这一点。有任何想法吗?

0 投票
2 回答
149 浏览

meteor - 当限制发生变化时,如何防止光标项助手重新运行?

这是修改后的排行榜:

http://meteorpad.com/pad/CgEG3uYBZDceTERXA/Leaderboard

players我为光标和显示添加了一个限制,scorePlusOne而不是score.

当我将限制从 1 增加到 2 时,第一个播放器模板不会重新渲染,但scorePlusOne助手会重新运行。

在此处输入图像描述

我不希望任何已渲染模板的助手重新运行,除非它们包含更改的反应性数据。有没有办法实现这种行为?

0 投票
0 回答
279 浏览

javascript - 如何在可能尚不存在的反应性对象字段上创建反应性依赖项?

给定一个充满良好反应性的物体,

我可以通过 Tracker 计算轻松地对这些字段做出反应:

但是,如果我知道稍后obj.baz将要定义它,并且我也想在它定义后立即对其做出反应,我不能这样做:

发生这种情况是因为如果它在没有obj.baz被定义的情况下运行,那么它不会添加对它的依赖,因此如果它出现或更改也不会重新运行。唯一的obj.baz反应方式是如果定义了计算foobar使计算无效baz,从而调用.get()并创建依赖项。

我如何对尚未定义的对象字段的创建做出反应?我更喜欢 ES5 中的答案,但我对 ES6 或 ES7 没问题。

0 投票
0 回答
34 浏览

javascript - 为什么在一个 Jasmine 描述块中使用多个计算时,Tracker 的反应性没有准确地启动一半?

当用 Jasmine 测试反应性时,一些 Tracker 计算开始以一种非常有趣的方式表现:恰好一半的计算是反应性的,另一半不是。

我为测试这种行为所做的如下:

所以基本上:

  1. 将反应式初始化foofalse.
  2. 开始跟踪它,等待它到达,true以便将测试声明为done().
  3. 使用超时来foo.set(true)解决测试。
  4. 停止此计算,因为不再需要它。

现在,让我们用不同的变量做同样的事情:

这就是乐趣的开始。虽然这个测试是相同的代码但名称不同,并且具有完全相同的编写逻辑,但它失败了,因为计算跟踪栏永远不会重新运行

console.log很好地展示了这一点:

foo 在它的计算中是:false
foo 在它的计算中是:true - 反应性开始了!
其计算中的 bar 是:false
[Nothing]

虽然很清楚 for 的计算foo被重新运行,因此其测试已完成,但 for 的计算bar永远不会失效,因此测试失败。

然而,这并不止于此。如果我们为一个新的反应变量(例如 )添加第三个测试用例baz并遵循与之前相同的过程(与其他变量一起初始化它,在同一函数的末尾添加测试describe),那么它就可以完美地工作了!

这里测试(1)成功,测试(2)失败,测试(3)成功。

现在,如果我们添加第四个测试,cat例如,按照相同的过程添加一个新的测试......那么测试(4)将失败并显示以下日志。

foo 在它的计算中是false
foo 在它的计算中是true
bar 在它的计算中是false bar 没有重新运行并且失败
baz 在它的计算中是false
baz 在它的计算中是true
cat 在它的计算中是false cat 没有重新运行并且失败
[Nothing]

foo并且baz已经对,而不是bar和做出了反应cat

我已经和另外两个(第五个和第六个)一起做了,同样的结果:(5)成功,(6)失败。
“奇数”测试成功,“偶数”测试失败。

完整复制代码:

为什么会这样?
我怎样才能解决这个问题,同时将所有这些反应变量保持在同一个describe函数中?


我试图添加嵌套describe函数但没有成功。
在自己不相关的describe函数中隔离测试时,这个问题神奇地消失了,请不要这样回答。