-
Notifications
You must be signed in to change notification settings - Fork 4
Home
Tao
是中文“道”的英文单词,可以理解为我们团队的“前端之道”、“工程之道”或者“产品之道”,反映了我们做产品的方法与态度。
Tao on Rails 本质上是 Ruby on Rails 在前端模块化方面的补充,填补了 Rails 在大型 SasS 软件前端模块化需求上的空白。所以 Tao on Rails 的开发模式跟传统的Rails基本上是一样的:前端脚本负责交互逻辑,交互行为会产生 remote link/form 请求,服务器端处理数据、渲染模版,然后通过 SJR 响应更新页面或者局部的状态。
Rails 的 UI 模块可以抽象为下图所示的模型:
在传统的 Rails 开发流程中,通常会通过 partial 模版来实现模版共享,但是 partial 模版并不能满足大型 SaaS 软件对模块化的需求;另一方面,也许是为了给开发者最大的自由度,Rails 官方并没有前端交互模块化的推荐方案,于是在大型 SaaS 软件中,随着时间的推移,前端交互脚本经常会变的越来越混乱、难以维护和扩展。
Tao on Rails 在服务器端提供了一个 Component 基础类 TaoOnRails::Components::Base,这个基础类可以为它的子类提供这些功能:
- 在 ActionView 加载之后动态的定义 Component 对应的 view helper 方法,这个 helper 是渲染 Component 的入口;
- 提供默认的渲染逻辑(如果找到对应的 partial 就渲染 partial,如果没有就渲染默认的 Custom Element);
- 可以根据需要定义 attribute 或者 helper method,成为类似 Presenter 的角色,将原来杂乱的 view helper 有序的组织起来。
Tao on Rails 在客户端也提供了一个 Component 基础类 Tao.Component,这个类其实是 HTMLElement
的子类,它封装了 Custom Elements V1 的很多接口,方便我们基于 Custom Elements V1 来实现前端交互的模块化。
通过两个 Component 类,Tao on Rails 把后端的模版渲染和前端的交互串联起来,形成UI模块的一个完整的闭环。
在开发 Tao Component 过程中,有时候需要抽象一些非 UI 模块来实现特定的功能。比如,tao_popover组件需要一个 Direction 模块来计算popover出现的方向,然后用 Position 模块来计算popover出现的具体位置。
为了方便编写这类非UI模块,Tao on Rails 在客户端提供了一个 Module 基础类 TaoModule,这个基础类可以为子类提供这些功能:
- Mixin 接口
- Events 接口
- Property/Option 定义接口
在 Tao on Rails 里,Page 也是一种特殊的 Component。每个页面的内容都会放到一个 Custom Element 里面,这个 Custom Element 继承自 Tao.Page,而 Tao.Page 又是继承自 Tao.Component 的。
Tao on Rails 提倡尽量把页面的逻辑抽象到 Component 里面,通常 Tao Page 里面的交互逻辑是很少的,只需要处理页面里 Components 之间的通信。
Tao on Rails 应用程序的生命周期是通过 Tao.Application 这个类来管理的,Tao.Application
是 Tao.Module
的子类。
Tao.Application
的对象会在初始化的时候做这些事情: