问题标签 [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.
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
.
javascript - 如何在静态非 Meteor 页面中使用 Tracker.autorun?
我网站的一些页面是服务器端渲染的,所以通常的 Meteor JavaScript 包对他们不可用。
我们希望缩小页面大小,但Tracker.autorun
用于轻量级反应性,我们如何使用 Meteor a-la-carte 呢?
meteor - Meteor:Tracker.autorun 和 dep.changed 导致无限循环
我正在使用新的 Tracker.Dependency 来跟踪几件事,但它会导致下面代码中的自动运行无限运行。怎么了?一旦我将 getSong 和 getSongId 分开以依赖于 dep 和 dep2,而不是仅仅依赖于 dep,下面的代码就可以了。
templates - Blaze 视图和模板之间有什么关系?
我了解 Blaze 用于通过使用 Tracker 使模板反应。我知道一个模板包含许多 View 对象,每个模板元素之一。
视图是“反应模板的构建块”并且“代表 DOM 的反应区域”。并且(来自文档), View 可以对应于“当前模板助手、事件处理程序、回调或自动运行”。
但我很困惑究竟什么是 View 对象,以及 Blaze View 如何与,Template.mytemplate.helpers()
到Template.mytemplate.autorun()
. 例如,每个辅助函数是否对应一个 View 对象?还是仅当函数包含响应式数据源时?该autorun
方法是针对整个模板的,一个View如何与一个包含多个View对象的整个模板关联呢?
meteor - 新数据可用时重新初始化库
我目前正在开发一个使用 video.js-Library 的 Meteor 应用程序。
我有以下模板:
渲染模板后初始化 video.js-Library 工作正常。
但是,如果使用不同的视频(使用不同的 RichMediaContent)呈现相同的模板,则不会重新初始化 videojs-Library。
我已经尝试将视频部分移动到自己的模板中并将其包含在 foo-Template 中,以便每次加载新视频时都应该调用 onRendered-Call。但这似乎不起作用。
如果视频发生变化,您知道如何重新初始化库吗?
提前致谢!
meteor - 流星跟踪器意外跳过
我正在关注有关 Tracker 的教程并看到意外行为。
在这里,我使用 getter 和 setter 来查看Tracker.autorun()
每当我调用 setter 时都会调用它。
当我打开浏览器控制台时,我希望看到
但我看到的只是第一个和最后一个,不管我打了多少电话setFavoriteFood()
。
为什么会这样?
javascript - Tracker:为什么在无效时删除计算?
我正在阅读跟踪器手册并且很难理解某些内容。
我知道这dependency.changed()
将使依赖项中的所有计算无效,导致跟踪器重新运行。
但是为什么 Meteor 在失效时会从依赖中删除计算呢?
例如,这是手册中的 Tracker 示例:
为什么我们要添加Tracker.currentComputation.onInvalidate()
回调以从依赖项中删除计算?对我来说似乎没有必要。
我想完全理解这一点。有任何想法吗?
meteor - 当限制发生变化时,如何防止光标项助手重新运行?
这是修改后的排行榜:
http://meteorpad.com/pad/CgEG3uYBZDceTERXA/Leaderboard
players
我为光标和显示添加了一个限制,scorePlusOne
而不是score
.
当我将限制从 1 增加到 2 时,第一个播放器模板不会重新渲染,但scorePlusOne
助手会重新运行。
我不希望任何已渲染模板的助手重新运行,除非它们包含更改的反应性数据。有没有办法实现这种行为?
javascript - 如何在可能尚不存在的反应性对象字段上创建反应性依赖项?
给定一个充满良好反应性的物体,
我可以通过 Tracker 计算轻松地对这些字段做出反应:
但是,如果我知道稍后obj.baz
将要定义它,并且我也想在它定义后立即对其做出反应,我不能这样做:
发生这种情况是因为如果它在没有obj.baz
被定义的情况下运行,那么它不会添加对它的依赖,因此如果它出现或更改也不会重新运行。唯一的obj.baz
反应方式是如果定义了计算foo
或bar
使计算无效baz
,从而调用.get()
并创建依赖项。
我如何对尚未定义的对象字段的创建做出反应?我更喜欢 ES5 中的答案,但我对 ES6 或 ES7 没问题。
javascript - 为什么在一个 Jasmine 描述块中使用多个计算时,Tracker 的反应性没有准确地启动一半?
当用 Jasmine 测试反应性时,一些 Tracker 计算开始以一种非常有趣的方式表现:恰好一半的计算是反应性的,另一半不是。
我为测试这种行为所做的如下:
所以基本上:
- 将反应式初始化
foo
为false
. - 开始跟踪它,等待它到达,
true
以便将测试声明为done()
. - 使用超时来
foo.set(true)
解决测试。 - 停止此计算,因为不再需要它。
现在,让我们用不同的变量做同样的事情:
这就是乐趣的开始。虽然这个测试是相同的代码但名称不同,并且具有完全相同的编写逻辑,但它失败了,因为计算跟踪栏永远不会重新运行。
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
函数中隔离测试时,这个问题神奇地消失了,请不要这样回答。