Javascript 什么';从木偶中的模块内部创建子模块的最佳方法是什么?
我正在构建一个可以由多个模块组成的应用程序(有些模块甚至会有子模块)。当应用程序被实例化时,我传入一个对象,该对象描述我希望为该应用程序实例(myApp)激活的模块,以及这些模块应该使用的类。然后,应用程序使用factory对象创建必要的模块。这是一个很好的概念证明,但是在从其他模块初始化方法中创建子模块并启动这些子模块时,我遇到了麻烦 使用下面的代码,我看到以下消息转储到控制台(添加数字以供参考)Javascript 什么';从木偶中的模块内部创建子模块的最佳方法是什么?,javascript,design-patterns,backbone.js,marionette,Javascript,Design Patterns,Backbone.js,Marionette,我正在构建一个可以由多个模块组成的应用程序(有些模块甚至会有子模块)。当应用程序被实例化时,我传入一个对象,该对象描述我希望为该应用程序实例(myApp)激活的模块,以及这些模块应该使用的类。然后,应用程序使用factory对象创建必要的模块。这是一个很好的概念证明,但是在从其他模块初始化方法中创建子模块并启动这些子模块时,我遇到了麻烦 使用下面的代码,我看到以下消息转储到控制台(添加数字以供参考) (Some.Module.Class)模块A初始化 (Some.Module.Class)模块B
//SUB MODULE
Some.SubModule.Class = Io.Modules.BaseModule.extend({
__className: "Some.SubModule.Class",
startWithParent: false,
onStart: function(options) {
console.log("(", this.getClassName(), ")", this.moduleName, "start");
},
initialize: function(options, moduleName, app) {
console.log("(", this.getClassName(), ")", this.moduleName, "initialize");
}
});
// MODULE
Some.Module.Class = Io.Modules.BaseModule.extend({
__className: "Some.Module.Class",
startWithParent: false,
onStart: function(options) {
console.log("(", this.getClassName(), ")", this.moduleName, "start");
_.each(this.submodules, function(module) { module.start(); });
},
initialize: function(moduleName, app, options) {
console.log("(", this.getClassName(), ")", this.moduleName, "initialize");
var moduleFactory = new Io.Factories.ModuleFactory({app:app});
var fieldConfigurator = moduleFactory.createModule("moduleB.submoduleB", Some.SubModule.Class, {});
}
});
// APPLICATION
var MyApp = Marionette.Application.extend({
...
initialize: function(opts) {
//Create all modules described in the options passed in
}
//Start up all modules
_.each(this.submodules, function(module) { module.start(); });
...
});
var myApp = new MyApp({
modules: {
moduleA: {
"class":Some.Module.Class,
options:{
someOption:someValue
}
},
moduleB: {
"class":Some.Module.Class,
options:{
someOption:someValue
}
},
...
}
});
myApp.start();
这可能不是你想听到的,但提线木偶的创造者德里克·贝利(Derick Bailey)将模块系统称为“一团可怕的烂摊子”。也许您最好使用诸如requirejs或browserify之类的工具来定义模块。的确根本不是我想听的。不幸的是,我打算将模块用作可以启动/停止并绑定到事件系统中的子应用程序,而不仅仅是构建过程的资源。听起来browserify并不能解决这个问题。谢谢你的提醒。要做到这一点可能并不难,只是让我质疑我现在使用木偶的选择。我已经在一个相当大的应用程序上使用木偶一段时间了,发现它非常好,主要用于布局视图、集合视图和复合视图。一开始我试着使用模块系统,但我个人发现它很复杂,很强迫,从实现模块到停止/启动模块。有没有其他方法来处理缺少子应用的问题?我看到他们在谈论第三版,但谁知道什么时候会出现呢。谢谢您的回复,顺便说一句。非常感谢。@fugged您可能想看看,它旨在解决subapp的许多问题,并提供集中但解耦的通信、依赖项注入等。它也可以很好地与木偶配合使用,并用于require/browserify。免责声明:我是合著者。