我有一个包含三个页面的应用程序(这些页面是单页接口)。这些页面具有类似但不完全相同的功能。
所以我想要使用提供共同功能的javascript模块。然后每个页面可以自定义/覆盖共同功能的某些部分。
我正在使用backbone.js,我的做法是:
1.加载包含公共模型、视图、集合等的文件。 2.加载定制/覆盖步骤1的特定于应用程序的文件。 3.调用init()函数实例化所有必要的模型/视图/集合。
目前,我将我的模块存储在类似于以下链接中的模块容器中:https://stackoverflow.com/a/9426071。每个模块都有一个可选的init()函数,由我的主init()函数执行。
例如:
我可以在 myApp.js 中实例化所有的模型/视图等,而不是每个模块的 init() 函数。这意味着有很多重复的代码。
或者,我可以坚持每个模块都有自己的 init() 函数,并在 myApp.js 中调用这些 init() 函数。我不喜欢这个方法,因为我需要为我的三个页面分别写下我的模块三次。
对于10个模块和一些库,这并不美观也不符合DRY原则。是否有任何方法可以访问(循环遍历)require.js持有的所有模块?
或者我是不是错过了什么,应该以不同的方式构建我的代码?
欢迎任何提示/想法,
迈克尔
所以我想要使用提供共同功能的javascript模块。然后每个页面可以自定义/覆盖共同功能的某些部分。
我正在使用backbone.js,我的做法是:
1.加载包含公共模型、视图、集合等的文件。 2.加载定制/覆盖步骤1的特定于应用程序的文件。 3.调用init()函数实例化所有必要的模型/视图/集合。
目前,我将我的模块存储在类似于以下链接中的模块容器中:https://stackoverflow.com/a/9426071。每个模块都有一个可选的init()函数,由我的主init()函数执行。
例如:
I have a file called results.js. It defines the common Model/Collection/View of search-results. In its init() function everything is instanciated, but this function is not yet called:
var resultView = new ResultView()
Then I include myApp.js, and parts of the View are overwritten.
- The main init() function calls results.js init() which instanciates the new View. Everything works nice, smooth and DRY.
我可以在 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个模块和一些库,这并不美观也不符合DRY原则。是否有任何方法可以访问(循环遍历)require.js持有的所有模块?
或者我是不是错过了什么,应该以不同的方式构建我的代码?
欢迎任何提示/想法,
迈克尔
arguments
,并在其中调用init()
(如果存在)? - chrisfrancis27arguments
?如果你指的是这个:function(module1, module2, module3, ...) {
我怎么能在不显式命名它们的情况下循环遍历它们呢? - Michaelarguments
对象 是function
的内置属性,它是传递给函数的所有参数的数组。在 require.js 的情况下,你知道接收到的参数将完全匹配你提供的依赖模块定义。 - chrisfrancis27arguments
看起来是一件非常基本的事情,我想知道为什么我以前从未阅读过它。这样,我甚至可以只明确命名一次模块,很棒。 - Michael