我想知道如何构建我的应用程序.我应该使用自定义视图和一个将控制它们的主视图.或者将视图保存在灯箱中更好.我发现的所有示例都以某种方式限制了功能并呈现了一个或几个屏幕.组织更大的应用程序的正确方法是什么?
我也在想.
初始点:
我们需要添加管理结构:
目标:
通常,模块之间存在紧密耦合:
以下是如何避免这种情况:
因此,它不会让View模块知道Backbone模型的东西,而是发出如下的用户输入事件:
"todo-update",{id:1,title:'Code'}tasks.find({id:1}).update({title:'Code'})Todo模块(例如使用Backbone)规则
例如,像GMail这样的电子邮件应用程序可能会有调解器
/src
/lib
/services
/mediators
/layout
/content
/config
/main.js
Run Code Online (Sandbox Code Playgroud)
模块类型:
请注意布局和内容之间的区别.通过从实际内容中分离UI组件和布局,可以轻松地重用UI模式,例如侧面板,弹出窗口,导航栏,粘贴标题,滚动视图等.
此外,我建议*.css为每个仅包含结构和最小主题的布局创建一个.所有主题都可以覆盖/扩展,因此很容易重新设置应用程序.config/theme.css
其他代码:
创建模块时,它会向所有调解员宣布其存在.我们使用Famo.us Engine发出全局事件.这将是唯一必需的依赖!
Engine.trigger('created',this)
Run Code Online (Sandbox Code Playgroud)
当模块被销毁时,它会向所有调解员宣布它的销毁.
Engine.trigger('destroyed',this)
Run Code Online (Sandbox Code Playgroud)
介体监听created和destroyed事件并将模块粘合在一起:
var someDataModule; // Backbone or whatever
Engine.on('create',function(module){
if(module instance of SomeDataModule) {
var someDataModule = module;
}
if(module instanceof TodoView) {
module.on('change-title',function({id:id,title:title}){
someDataModule.find({id:id}).set('title',title);
})
}
})
Run Code Online (Sandbox Code Playgroud)
在简单的调解器中,您可以按顺序(即SomeDataModule之前TodoView)初始化模块.但是,在更复杂的情况下,您可能需要使用a Promise来结合所有内容.
"自包含"模块有三个例外:
允许布局和内容模块具有层次依赖性.父母可以初始化孩子,并期待这些孩子的某些事件.一个ListView可能初始化ItemView和处理ItemRemoved事件.
服务可以是Facade/Adapter,用于其他服务.例如,a DataService可能为a 提供简化,抽象和安全层RestApiService.
当然,调解员有硬连线依赖,因为他们结合了应用程序!