惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
Stack Overflow Blog
Stack Overflow Blog
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
Engineering at Meta
Engineering at Meta
L
LangChain Blog
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
Y
Y Combinator Blog
月光博客
月光博客
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
A
About on SuperTechFans
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
小众软件
小众软件
H
Help Net Security
Last Week in AI
Last Week in AI
B
Blog RSS Feed
宝玉的分享
宝玉的分享
N
Netflix TechBlog - Medium
博客园 - 叶小钗
The GitHub Blog
The GitHub Blog

博客园 - 沙加

前端设计模式之 MPVC Part 3 前端设计模式之 MPVC Part 1 App Engine 缓存与数据一致性 常用跨浏览器效果 同步请求真的有那么恐怖? Google Closure 的单元测试纪要 双飞翼布局的选区问题 一个 JS 面试题目 HTML 5 之旅 part 1 - 无头苍蝇 bind, delegate, live 三者的区别 Objective-C 学习笔记 - part 12 - 多线程 Objective-C 学习笔记 - part 11 - 错误处理 Objective-C 学习笔记 - part 10 - 选择器 Objective-C 学习笔记 - part 9 - 静态标记的类型 Objective-C 学习笔记 - part 8 - 快速枚举 Objective-C 学习笔记 - part 7 - 相关引用 Objective-C 学习笔记 - part 6 - 类别与扩展 Objective-C 学习笔记 - part 5 - 申明属性 Objective-C 学习笔记 - part 4 - 协议
前端设计模式之 MPVC Part 2
沙加 · 2013-01-22 · via 博客园 - 沙加

现在设计一个系统,目标为达到以下要求:

  1. 页面由若干可复用的构建块组件,
  2. 构建块可以嵌套
  3. 不同的页面只需要在后台将构建块按层级关系组装在一些即可,无需编写额外的代码
  4. 在交互过程中,可以刷新某个或某几个构建块来达到更新视图的目的

主要面临的挑战为:

模块的级联更新问题

在用户操作时将引发一系列的模块更新,它们如何同用户操作建立联系,即这种事件订阅关系如何生成?

解决方案:

  • 对于父子关系的组件,由于构建块之间是层层嵌套的关系,底层的事件可以自然地冒泡到上层组件,但是这种事件传播又不同于 Dom 层面的事件冒泡。
  • 对于处于不同子树上的组件,则使用全局事件进行广播(好在这样的情况并不多)。
  • 兄弟节点之间的节点或有公共父节点的组件,则在公共父节点上处理订阅逻辑

模块的刷新如何实现无手动代码参与

将更新抽象为更新消息,消息传到客户端即可使用消息处理器自动处理,即完成视图的自动刷新,对于不能刷新的组件,提供手动更新的可选方式以获取更高的录活性。

构建模块如何进行初始化

每个构建块其实有两部分构成,Dom 树的根节点,Javascript 的一个模块实例,在后台生成页面时已经为每个构建块生成了唯一的 ID,并将此模块的类型通过 Attribute 形式传到页面端,页面端根据此类型创建一个对应类型的实例,并按唯一 ID 为 Key 查找到对应的 Dom 元素,将 Dom 元素绑定给模块实例,接下来模块实例调用初始化函数。