【问题标题】:Uncaught ReferenceError: Collection is not defined未捕获的 ReferenceError:未定义集合
【发布时间】:2013-09-23 18:49:56
【问题描述】:

我正在做一个流星应用程序。我在客户端文件夹内的 main.js 文件中定义了集合变量。在同一位置还有 templates.js 文件。 Template.myTemplate.rendered = function() {};在 templates.js 文件中定义。我可以访问渲染部分内的集合变量,但它在它之外不可用。

如何才能在“渲染”部分之外访问集合变量?

main.js 内部

collectionVariable = new Meteor.Collection('collection_name');

templates.js 内部

console.log(collectionVariable); // getting "Uncaught ReferenceError: collectionVariable is not defined" here.

Template.myTemplate.rendered = function() {

  //Some code. Can access the variable here.

};

谢谢

【问题讨论】:

  • 提示:将代码缩进四个空格以使其格式正确。

标签: meteor


【解决方案1】:

记住文件加载顺序。在您的情况下,templates.js 似乎在 main.js 之前加载,因此 collectionVariable 在评估时没有定义。如果您想确保可以在文件正文中使用变量,请使用Meteor.startup

var localVariable;

Meteor.startup(function(){
  localVariable = collectionVariable;
  console.log(collectionVariable);
});

【讨论】:

  • 感谢休伯特的回复。是的。看起来 templates.js 在 main.js 之前运行。有什么解决方法吗?就像,如果我在 templates.js 而不是 main.js 中创建集合。那会是一件好事吗? main.js 应该是我的主要客户端脚本。
  • 首先,大多数时候集合应该在共享代码区域,而不仅仅是在客户端——你希望服务器上的同一个集合能够利用同步。你不想加倍代码。除非它是一个本地集合 - 但是你不会在创建过程中使用 name 参数。
  • 至于排序,最好不要依赖它。无论如何,你真的不应该有这个问题。所有需要集合的东西要么转到在需要时运行的帮助程序/回调(所以肯定是在加载应用程序之后),或者可以毫无问题地移动到Meteor.startup。为什么文件正文中需要collectionVariable?您可能正在尝试实现“流星方式”之外的目标。
  • 我有一些动态信息框将根据数据库详细信息显示在谷歌地图中。当数据发生变化时,我试图为信息框自定义 div 提供一些 jquery 效果。问题是 jquery 代码无法正常工作,因为似乎 div 元素的创建尚未完全完成,无法正常工作。
猜你喜欢
  • 1970-01-01
  • 2023-01-12
  • 2023-01-23
  • 2016-11-03
  • 2011-01-05
  • 2016-01-02
  • 2013-10-06
  • 2016-12-17
相关资源
最近更新 更多