反应性变量在定义时是未定义的
Reactive variable is undefined when it is defined
我想得到一些帮助调试的情况下,一个反应变量是未定义的,当它已经被定义。
这段代码将一个反应变量附加到模板实例,并在template.autorun()
中使用该变量。
Template.home.onCreated(function () {
this.limit = new ReactiveVar(15);
this.autorun(function () {
this.subscribe('recent-topics', this.limit.get());
});
});
当我第一次加载模板时,我希望模板使用参数15
订阅recent-topics
。但是,代码抛出了一个错误:
Uncaught TypeError: Cannot read property 'get' of undefined
知道为什么吗?
只是为了传播ES6的乐趣:
Template.home.onCreated(function () {
this.limit = new ReactiveVar(15);
this.autorun(() => {
this.subscribe('recent-topics', this.limit.get());
});
});
确保您添加了grigio:babel
包,并且您的Javascript文件以.es6.js
、.es6
或.jsx
结尾。
在ES6(又名ECMAScript 6)中,有一个新的"胖箭头"语法,与CoffeeScript的实现非常相似。在ES6中,当你这样做时:
someFunc = function () {
anotherThing((var1, var2) => {
this.thing = true;
});
};
和下面的操作是一样的:
someFunc = function () {
var self = this;
anotherThing(function (var1, var2) {
self.thing = true;
});
};
这是一个范围问题。
在您的跟踪器内部。Autorun,这不再是指模板,而是Autorun的回调函数。在自动运行中,尝试调用Template.instance().limit.get()。
比使用Template.instance().limit.get()
(ryan's answer)要好
你应该这样做:
Template.home.onCreated(function () {
var self = this;
self.limit = new ReactiveVar(15);
self.autorun(function () {
self.subscribe('recent-topics', self.limit.get());
});
});
相关文章:
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- 如何检查管道中未定义的项目
- TypeError:无法读取属性'推'未定义的JavaScript
- fetch() 函数未在 Ubuntu Chromium 浏览器上定义
- $window.ga在AngularJS事件中未定义
- 未捕获的TypeError无法读取未定义的属性socialsharing
- WebDriverException:tinyMCE未在selenium Web driver java中定义
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 无法获取属性'selectedIndex'的未定义引用或null引用
- 阻止用户在Netsuite中使用标准/未自定义的表单
- 要求多页&多应用程序未执行定义回调
- KnockoutJS:渲染后应用绑定导致“;xxx未被定义”;
- 使用 RequireJS 加载时如何不定义“定义”
- ASP 剑道下拉列表默认值未使用定义的模板
- "FB未被定义”;在互联网浏览器(Facebook API)中
- 在函数中破坏数组失败;let未被定义”;
- Chrome扩展抛出"未定义"定义变量
- 如何将自定义(定义)顺序应用于DC.js中的行图的行
- Javascript/JQuery POST "url"未定义(定义)