Meteor 未捕获引用错误:未定义集合
我正在做流星应用程序。我在客户端文件夹的main.js文件中定义了collection变量。在同一位置还有templates.js文件。Template.myTemplate.rendered=function(){};在templates.js文件中定义。我可以在渲染部分内访问集合变量,但在渲染部分外它不可用 如何才能访问“rendered”部分之外的集合变量 内main.jsMeteor 未捕获引用错误:未定义集合,meteor,Meteor,我正在做流星应用程序。我在客户端文件夹的main.js文件中定义了collection变量。在同一位置还有templates.js文件。Template.myTemplate.rendered=function(){};在templates.js文件中定义。我可以在渲染部分内访问集合变量,但在渲染部分外它不可用 如何才能访问“rendered”部分之外的集合变量 内main.js collectionVariable = new Meteor.Collection('collection_nam
collectionVariable = new Meteor.Collection('collection_name');
Inside templates.js
console.log(collectionVariable); // getting "Uncaught ReferenceError: collectionVariable is not defined" here.
Template.myTemplate.rendered = function() {
//Some code. Can access the variable here.
};
谢谢请记住文件加载顺序。在您的案例中,
templates.js
似乎是在main.js
之前加载的,因此collectionVariable
在计算时没有定义。如果要确保可以在文件体中使用变量,请使用Meteor.startup
:
var localVariable;
Meteor.startup(function(){
localVariable = collectionVariable;
console.log(collectionVariable);
});
提示:将代码缩进四个空格以正确格式化。谢谢Hubert的回复。对看起来templates.js在main.js之前运行。这方面有什么办法吗?比如,如果我在templates.js而不是main.js中创建集合。这是一件好事吗?main.js应该是我的主客户端脚本。首先,大部分时间的集合都应该在共享代码区域中,而不仅仅是在客户端-您希望服务器上的相同集合能够利用同步。你不想把代码加倍。除非它是本地集合,否则在创建过程中就不会使用name参数。至于排序,最好不要依赖它。无论如何,你真的不应该有这个问题。所有需要收集的内容要么转到需要时运行的帮助器/回调(当然是在加载应用程序之后),要么可以毫无问题地移动到
Meteor.startup
。为什么文件正文中需要collectionVariable
?你可能在试图实现一些非“流星方式”的东西。我有一些动态信息框,将根据数据库详细信息显示在谷歌地图上。我试图在数据更改时为Infobox自定义div提供一些jquery效果。问题是jquery代码不起作用,因为div元素的创建似乎还没有完全完成,无法正常工作。