我想知道如何构建我的应用程序。我应该使用自定义视图和一个将控制它们的主视图。或者将视图保存在灯箱中更好。我发现的所有示例都以某种方式限制了功能并呈现单个或几个屏幕。组织更大的应用程序的正确方法是什么?
答案 0 :(得分:5)
我也想知道。
起点:
我们需要添加管理结构:
目标:
通常,模块之间存在紧密耦合:
以下是如何避免这种情况:
因此,它不会让View模块了解Backbone模型,而是发出如下的用户输入事件:
"todo-update",{id:1,title:'Code'}
tasks.find({id:1}).update({title:'Code'})
(例如使用Backbone)规则
例如,像GMail这样的电子邮件应用程序可能会有
的调解器/src
/lib
/services
/mediators
/layout
/content
/config
/main.js
模块类型:
请注意布局和内容之间的区别。通过分离UI组件和&从实际内容布局,重用UI模式变得容易,如侧面板,弹出窗口,导航栏,粘贴标题,滚动视图等。
此外,我建议为每个仅包含结构的布局创建*.css
,并尽量减少主题。所有主题都可以在config/theme.css
中覆盖/扩展,因此很容易重新设置应用。
其他代码:
创建模块时,它会向所有调解员宣布其存在。我们使用Famo.us Engine
发出全局事件。这将是唯一所需的依赖项!
Engine.trigger('created',this)
当模块被销毁时,它会向所有调解员宣布销毁。
Engine.trigger('destroyed',this)
调解员收听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);
})
}
})
在简单的调解器中,您可以按顺序初始化模块(即SomeDataModule
之前的TodoView
)。但是,在更复杂的情况下,您可能需要使用Promise
来结合所有内容。
"有三个例外;自包含"模块:
布局和内容模块允许具有层次依赖关系。父母可以初始化孩子,并期待这些孩子的某些事件。 ListView
可能会初始化ItemView
并处理ItemRemoved
个事件。
服务可以是其他服务的Facade / Adapter。例如,DataService
可能为RestApiService
提供简化,抽象和安全层。
当然,调解员有硬连线依赖,因为他们结合了应用程序!
答案 1 :(得分:1)
Famo.us专注于UI,所以你最好寻找一个MVC模式来获得更好的结构,特别是在大型项目上,实际上因为Famo.us非常年轻,它只与Angular集成:
http://famo.us/integrations/angular/
但众所周知,他们将在不久的将来添加其他MVC集成
尝试Angular并查看它是否是您需要的,这是一个非常好的MVC框架,我的建议是首先学习Angular至少基础知识(http://angularjs.org/然后在Famo.us大学之后({{3})你可以理解这种整合