在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 globalwindow对象来取代这个默认行为。

你的代码是正确的,这可能是一个加载顺序问题。