我正在重构我的流星应用程序,突然每个视图(html模板)的逻辑(JS脚本)与初始文件分离后停止工作。
最初我的项目看起来像这样
-project
-.meteor
-client
-templateA.html
-templateB.html
-templateC.html
-client.js <-- contain JS for all template
-display.css
-server
-server.js
-model.js <--collections
-router.js <-- iron-router router
但随着项目的发展,我很难在一个文件中管理整个js代码。所以我决定把它分成更小的模块。所以它就像这样
-project
-.meteor
-client
-views
-templateA.html
-tempplateA.js
-templateB.html
-templateB.js
-templateC.html
-client.js <---templateC JS is still in client.js
-stylesheets
-display.css
-server
-server.js
-model.js
-router.js
每个视图(模板)都不起作用。浏览器只生成空白页面。但是,我设法生成了templateC。所以我的推论是,templateC可以工作,因为JS仍然在原始文件中。
我该怎么做才能使其适用于其他模板?
答案 0 :(得分:1)
/client/compatibility
是解决问题的关键。
您在JS文件中定义的变量是该文件的本地变量。 See this section.
基本上,Meteor用(function(){ ... })();
模式包装每个单独的文件。这意味着当你定义:
var something = {};
在一个文件中,something
在另一个文件中为undefined
。如果要创建将在整个应用程序中共享的变量,则需要将其设置为全局变量。幸运的是,这很简单 - 只需删除var
关键字:
something = {};
现在,您可以在代码中的任何位置使用something
。