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

Fre*_*cer 5 javascript node.js meteor

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

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

以下是UserInfo.js中的两个函数

文件位于client/scripts文件夹中:

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;
  }
};
Run Code Online (Sandbox Code Playgroud)

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

ReferenceError: isAdmin is not defined

----编辑----

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

更多信息:

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

Hub*_* OG 3

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

@isAdmin = user -> ...
Run Code Online (Sandbox Code Playgroud)

这是由于 Meteor 变量遮蔽如何与 CoffeeScript 自动变量声明结合使用。

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

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