【问题标题】:call functions from separate files with Meteor使用 Meteor 从单独的文件中调用函数
【发布时间】:2013-05-08 05:07:39
【问题描述】:

我想在 Meteor 中创建一个应用程序, 根据我对它首先加载的手册的理解 子目录,然后按照字母顺序。 我的文件结构是这样的……

/server
/lib
/client
    /lib
        game.js -> already starts declaring the function "makeBoard(){}"
    /template.js -> where the function "makeBoard()" is called.

因此,错误函数“makeBoard()”似乎不存在,仅当我在要调用它的同一文件中声明时才有效。即使我将文件“game.js”移动到“template.js”所在的同一目录,它也会发生。 我应该如何正确引用 Meteor 上不同文件中的资源?

【问题讨论】:

    标签: function meteor file-structure


    【解决方案1】:

    按照 avital 的建议,使用全局定义的变量会起作用,但不是推荐的代码设计选择 (see JS mistake 1 listed here)。

    您可以在 lib 目录中创建一个文件:

    Meteor.myFunctions = {
    ...
        makeBoard : function() { ... },
    ...
    }
    

    然后在任何其他 js 文件中,您可以调用 Meteor.myFunctions.makeBoard()。这应该在lib目录中完成,因为Meteor保证lib中的js文件在其他目录之前被加载,所以你的函数已经被加载了。

    【讨论】:

    • 非常聪明。如果您从多个文件共享函数,这将成为可能: Meteor['myFunctions'] = Meteor['myFunctions'] || {}; Meteor['myFunctions']['createinstanceclass'] = function () { return new instanceclass(); } 流星['myFunctions'] = 流星['myFunctions'] || {}; Meteor['myFunctions']['createsolutionclass'] = function () { return new solutionClass();如果您同意,请将其添加到您的答案中;如果没有,请解释如何做得更好:)
    • 谢谢。终于运行了一些自定义服务器端代码。我尝试在客户端上运行它,但它没有按预期工作。太棒了。
    【解决方案2】:

    makeBoard = function() { ... }定义函数。

    function foo() { ... } 定义的函数是文件的本地函数,var bar = ... 定义的变量也是如此。

    【讨论】:

    • 使用 EMCA6 版本,特别是用于 JavaScript 代码的 "use strict" 标记,此解决方案无法编译。出于这个原因,我强烈建议使用@Shwaydogg 解决方案。
    • 这仅适用于客户端。请参阅 Shwaydogg 对使用 Meteor.MyFunction.Method() 的 SERVER 端修复的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多