在Meteor中,我们通常将javascript函数附加到模板上。我们在哪里放置标准的javascript函数?
例如,在我的一个应用程序中,我有一个UserInfo.js文件,其中包含一堆javascript函数,用于处理用户登录和获取用户信息。
以下是我在用户信息中的两个功能.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
更多信息:
我认为当我使用咖啡脚本时会出现问题。当我将我的咖啡脚本文件转换为 js 文件时,一切似乎都正常。
你需要用 @
将 coffeescript 变量声明为全局变量:
@isAdmin = user -> ...
这是由于 Meteor 变量阴影与 coffeescript 自动变量声明相关的工作方式。
默认情况下,Coffeescript 自己进行"智能"变量声明 - 基本上是将var variableName
放在 javascript 中变量可见的第一位。在您的情况下,这会导致isAdmin
由 js 中的 var
声明,因此它的作用域为文件。
使用 char @
通过将变量绑定到this
、global
或window
对象来取代此默认行为。
您的代码是正确的,这可能是加载顺序问题。