在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文件时,一切似乎都有效。
答案 0 :(得分:3)
您需要使用@
声明coffeescript变量为全局:
@isAdmin = user -> ...
这是由于Meteor变量阴影如何与coffeescript自动变量声明一起工作。
默认情况下,Coffeescript会自行执行“智能”变量声明 - 基本上是将var variableName
置于javascript中的第一个位置,其中变量是可见的。在您的情况下,这会导致isAdmin
在js中由var
声明,因此它的作用域是文件。
使用@
char通过将变量绑定到this
,global
或window
对象来取代此默认行为。
答案 1 :(得分:2)
您的代码是正确的,可能是load order问题。