在meteor应用程序中放置JavaScript函数的位置
在meteor中,我们通常将JavaScript函数附加到模板。 我们在哪里放置标准的JavaScriptfunction?
例如,在我的一个应用程序中,我有一个UserInfo.js文件,其中有一堆用于处理用户login和获取用户信息的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文件转换为js文件时,一切似乎都奏效了。
您需要使用@
将coffeescriptvariables声明为全局variables:
@isAdmin = user -> ...
这是由于Meteorvariablesshadowing如何与coffeescript自动variables声明相关。
Coffeescript在默认情况下会自行执行“智能”variables声明 – 基本上通过将var variableName
放置在JavaScript中variables可见的第一位。 在你的情况下,这会导致isAdmin
由js中的var
声明,因此它的作用域是文件。
使用@
char通过将variables绑定到this
global
或window
对象来取代这个默认行为。
你的代码是正确的,这可能是一个加载顺序问题。