在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;
}
};
当我运行应用程序并从浏览器控制台调用isAdmin()时,它说:
ReferenceError: isAdmin is not defined
-编辑
当我将javascript文件放在client/compatibility文件夹下时,问题似乎暂时得到了解决,但现在问题又浮出水面。我唯一记得的改变就是给>> Meteor Reset
打电话
更多信息:
我认为当我使用coffeescript时,问题就出现了。当我将coffeescript文件转换为js文件时,一切似乎都正常。
发布于 2013-10-06 20:01:04
您需要使用@
将coffeescript变量声明为全局变量
@isAdmin = user -> ...
这是由于Meteor变量阴影与coffeescript自动变量声明有关的工作方式。
默认情况下,Coffeescript自己执行“智能”变量声明--基本上是将var variableName
放在变量可见的javascript中的第一位。在您的示例中,这将导致isAdmin
由var
在js中声明,因此它的作用域为文件。
使用@
char取代此默认行为,将变量绑定到this
、global
或window
对象。
发布于 2013-10-06 08:19:28
您的代码是正确的,这可能是一个负荷顺序问题。
https://stackoverflow.com/questions/19204717
复制相似问题