我正在构建一个具有单个全局命名空间的应用程序,如下所示:
var myApp = {};
然后我有一堆不同的可重用“模块”,包括模型,视图和控制器。
//Bar chart module code
org.example.chart.bar.module
org.example.chart.bar.model
org.example.chart.bar.view
org.example.chart.bar.controller
我还有一个大的dataSource单例和一个dataManager,用于将数据加载到dataSource:
org.example.data.dataSource
org.example.data.dataManager //populates the dataSource with CSV data
最后,应用程序中应该提供的翻译字符串和设置:
org.example.static.translations
org.example.static.settings
您如何(重新)组织这个以便我可以轻松访问应用程序级单例(例如dataSource,dataManager,翻译等),并且可以轻松实例化当前应用程序范围内的可重用模块实例吗
(例如,您是否已经从一开始就为您的“类”和您的应用程序使用相同的命名空间?或者您可能会像这样引用:myApp.translations = org.example.static.translations?)< / p>
答案 0 :(得分:1)
不,我们没有命名空间。我们编写模块化代码,我们使用模块加载器。
模块加载器的示例为require.js或browserify或seajs。
示例模块类似于:
(function () {
var jQuery = require("jQuery");
var chart = require("chart");
...
define("moduleName", moduleObject);
})();
答案 1 :(得分:0)
没有什么可以阻止你在课堂上添加另一个名字。例如。
org.ds = org.example.data.dataSource;
然后你可以打电话
org.ds.getDatasource();
而不是
org.example.data.dataSource.getDatasource();
但两者仍然有效。
编辑:您还可以创建其他更简单的函数来调用它从oo结构中取出
var dataSource = function () { return org.example.data.dataSource.getDatasource(); };
答案 2 :(得分:0)