5

在 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 文件放在client/compatibility文件夹下时,问题似乎已暂时解决,但现在问题又出现了。我记得唯一改变的是打电话>> Meteor Reset

更多信息:

我认为当我使用咖啡脚本时会出现问题。当我将咖啡脚本文件转换为 js 文件时,一切似乎都正常。

4

2 回答 2

3

您需要将 coffeescript 变量声明为全局变量@

@isAdmin = user -> ...

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

Coffeescript 默认情况下自己进行“智能”变量声明 - 基本上是通过将var variableName变量放在可见变量的 javascript 中的第一个位置。在您的情况下,这会导致在 jsisAdmin中声明var,因此它的范围是文件。

使用@char 通过将变量绑定到this,globalwindowobject 来取代此默认行为。

于 2013-10-07T04:01:04.963 回答
2

您的代码是正确的,这可能是加载顺序问题。

于 2013-10-06T16:19:28.327 回答