我正试着用这个图书馆做实验。
首先,当我试图将所有单独的javascript文件安装到client/兼容性文件夹时,当我从常量js文件调用自动汇总时,会收到一条错误消息:
AUTOTAGS = { ... } // autotags-js-core.js
AUTOTAGS.TAG_CONSTANTS = [ 'news','research','favourite' ]; // autotags-js-constants.js它不断地说,自动收费是没有定义的。我从阅读有关全局范围的文章中推断,使用VAR的任何外部库都希望具有全局范围,并将其置于兼容性之下。
如果这是正确的,那么为什么在将所有单独的文件放在lib/external下时,范围不是全局的?不带var的自动汇总= {..}意味着它对整个应用程序可用,对吗?
相反,我通过将所有javascript文件合并到lib/external下的一个js文件中,从而获得了工作范围。我以为我能理解,但情况越来越糟。
在单个js文件中--任何以闭包开头的函数都是该文件的本地函数,而不是全局范围,而分配给变量名称的任何函数都使其成为全局变量?
function(something() { ... } ) // closure, local
generateTags = function() { ... } // global scope?
var generateTags = function() { .... } // is this local or global? 如果var generateTags函数是本地的,那么将其置于客户机/兼容性之下将使其具有全局性?最后!-我得到了一个模糊的概念,我应该在lib/environment.js . is下定义全局变量- https://github.com/oortcloud/unofficial-meteor-faq#where-should-i-put-my-files,这是真的吗?
发布于 2013-11-12 00:23:06
这里其实有两个问题。一个是javascript中的作用域,另一个是如何将自动汇总库集成到一个meteor项目中。由于第一个问题的答案应该相对容易在其他地方找到,所以我只想回答第二个问题。
您得到这个“未定义”错误的原因不是范围问题,而是与将文件加载到您的流星应用程序的顺序有关。也就是说,autotags-js-constants.js先于autotag-js-core.js,因为常量以字母顺序先于核心。因此,在解析AUTOTAGS文件时没有定义autotags-js-constants.js变量。
克服此问题的一个简单方法是重命名您的文件,以强制执行正确的加载顺序。另一种方法是使用一个工具,使您能够定义文件之间的依赖关系。如果您感兴趣,请看一看要求项目,它基本上是一个轻量级和流星友好的核心需求特性实现。
然而,最好的解决方案可能是创建一个自定义的智能包。它将允许您显式地定义加载文件的顺序。只需查看一些现有的智能包,以了解如何实现这一点。我还建议使用陨石来管理自定义的智能包。
https://stackoverflow.com/questions/19917359
复制相似问题