我有一个包含三页的应用程序(它们是单页界面)。这些页面具有相似但不相同的功能。
所以我想拥有提供通用功能的 javascript 模块。然后每个页面可以自定义/覆盖部分通用功能。
我正在使用backbone.js,所以我要做的是:
- 加载包含常见模型、视图、集合等的文件。
- 加载自定义/覆盖步骤 1 部分的特定于应用程序的文件
- 调用一个 init() 函数来实例化所有必要的模型/视图/集合
目前,我将模块存储在类似于以下内容的模块容器中:https ://stackoverflow.com/a/9426071 每个模块都有一个可选的 init() 函数,由我的 main init() 函数执行。
例子:
我有一个名为 results.js 的文件。它定义了搜索结果的通用模型/集合/视图。在它的 init() 函数中,一切都被实例化了,但是这个函数还没有被调用:
var resultView = new ResultView()
然后我包含 myApp.js,部分视图被覆盖。
- 主 init() 函数调用 results.js init() 实例化新视图。一切都很好,光滑和干燥。
现在我想切换到 require.js 而不是我自己的模块容器,想知道如何组织我的代码。
我可以在 myApp.js 中实例化所有模型/视图等,而不是每个模块的 init() 函数。这意味着有很多重复的代码。
或者我可以坚持每个模块都有它的 init() 函数,并在 myApp.js 中调用这些 init() 函数。我不喜欢这样,因为我必须为我的三页中的每一页明确写下我的模块三次:
require(['module1', 'module2', 'module3', ...],
function(module1, module2, module3, ...) {
var init = function() {
module1.init();
module2.init();
module3.init();
...
}
return {init: init};
}
);
对于 10 个模块和许多库,这不是很好而且很干燥。有没有办法访问(循环) require.js 拥有的所有模块?
或者我错过了什么,我应该以不同的方式构建我的代码吗?
欢迎任何提示/想法,
迈克尔