在Meteor应用程序中放置javascript函数的位置

时间:2013-10-06 02:14:42

标签: javascript node.js meteor

在Meteor中,我们通常会将javascript函数附加到模板。我们在哪里放置标准的javascript函数?

例如,在我的一个应用程序中,我有一个 UserInfo.js 文件,该文件有一堆javascript函数,用于处理登录用户和获取用户信息。

以下是我在 UserInfo.js

中的两项功能

文件位于客户端/脚本文件夹中:

isAdminById = function(userId) {
  var user;
  user = Meteor.users.findOne(userId);
  return user && isAdmin(user);
};

isAdmin = function(user) {
  if (!user || typeof user === 'undefined') {
    return false;
  } else {
    return !!user.isAdmin;
  }
};

当我运行应用程序并从浏览器控制台调用isAdmin()时,它会显示:

ReferenceError: isAdmin is not defined

----编辑----

当我将javascript文件放在客户端/兼容性文件夹下时,问题似乎暂时得到解决,但现在问题已经重新出现。我唯一记得改变的是调用>> Meteor Reset

更多信息:

我认为当我使用coffeescript时会出现问题。当我将我的coffeescript文件转换为js文件时,一切似乎都有效。

2 个答案:

答案 0 :(得分:3)

您需要使用@声明coffeescript变量为全局:

@isAdmin = user -> ...

这是由于Meteor变量阴影如何与coffeescript自动变量声明一起工作。

默认情况下,Coffeescript会自行执行“智能”变量声明 - 基本上是将var variableName置于javascript中的第一个位置,其中变量是可见的。在您的情况下,这会导致isAdmin在js中由var声明,因此它的作用域是文件。

使用@ char通过将变量绑定到thisglobalwindow对象来取代此默认行为。

答案 1 :(得分:2)

您的代码是正确的,可能是load order问题。