基于 Javascript 的组件化开发框架:Transformers

jopen 10年前

Transformers 是一套基于 Javascript 的已彻底组件化与模块化的开发框架,主要关注组件路由、组件消息传递和组件异步加载等,其中要解决的核心问题是组件间的解耦。

快速开始

引入 jQuery

<script src="http://javascript.u.qiniudn.com/jquery/1110.js"></script>

引入 Transformers 框架

<script src="http://javascript.u.qiniudn.com/jquery/transformers.js"></script>

开始使用

1. 编写组件容器

<!doctype html>  <html>  <head>      <title>Hello World</title>      <meta charset="utf-8" />      <script src="http://javascript.u.qiniudn.com/jquery/1110.js"></script>      <script src="http://javascript.u.qiniudn.com/jquery/transformers.js"></script>  </head>  <body>    <div id="content" class="TFComponent">      <div>          <!--              指定 tf-action-click 属性会给此元素绑定 click 事件              事件处理器是组件的 testAction 方法          -->          <button type="button" tf-action-click="test">测试</button>      </div>        <!-- content 模板的目标渲染节点 -->      <div class="TFTarget-content"></div>        <!-- 名为 content 的模板 -->      <script type="text/html" class="TFTemplate-content">      你好!世界!      </script>  </div>    </body>  </html>

2. 创建应用程序

// 创建应用程序  TF.Core.Application.create({      baseUrl: "./"  });

3. 创建组件 Home

// 定义名为 Home 的组件  TF.define('Home', {      // 组件 DOM 准备完毕回调函数      DomReady: function() {          console.log('ready!');      },        // Action 是组件对外的接口      testAction: function(args) {          console.log('test!');            // 渲染静态模板          this.sys.renderStaticTemplate('content');            this.renderOk();      },        // 组件私有方法,外部无法访问      renderOk: function() {          console.log('render OK!');      }  });

4. 注册组件

// 添加名为 Home 的组件到组件管理器中  TF.Core.ComponentMgr.add([{      name: 'Home',      appendRender: false,      lazyRender: false,      hide: false,      applyTo: '#content'  }]);

5. 启动应用程序

// 等待 DOM Ready  TF.ready = function(){      // 启动应用程序      TF.Core.Application.bootstrap();  };

实例

<!doctype html>  <html>  <head>      <title>Hello World</title>      <meta charset="utf-8" />      <script src="http://javascript.u.qiniudn.com/jquery/1110.js"></script>      <script src="http://javascript.u.qiniudn.com/jquery/transformers.js"></script>  </head>  <body>    <div id="content" class="TFComponent">      <div>          <!--              指定 tf-action-click 属性会给此元素绑定 click 事件              事件处理器是组件的 testAction 方法          -->          <button type="button" tf-action-click="test">测试</button>      </div>        <!-- content 模板的目标渲染节点 -->      <div class="TFTarget-content"></div>        <!-- 名为 content 的模板 -->      <script type="text/html" class="TFTemplate-content">      你好!世界!      </script>  </div>    <script type="text/javascript">  // 创建应用程序  TF.Core.Application.create({      baseUrl: "./"  });    // 定义名为 Home 的组件  TF.define('Home', {      // 组件 DOM 准备完毕回调函数      DomReady: function() {          console.log('ready!');      },        // Action 是组件对外的接口      testAction: function(args) {          console.log('test!');            // 渲染静态模板          this.sys.renderStaticTemplate('content');            this.renderOk();      },        // 组件私有方法,外部无法访问      renderOk: function() {          console.log('render OK!');      }  });    // 添加名为 Home 的组件到组件管理器中  TF.Core.ComponentMgr.add([{      name: 'Home',      appendRender: false,      lazyRender: false,      hide: false,      applyTo: '#content'  }]);    // 等待 DOM Ready  TF.ready = function(){      // 启动应用程序      TF.Core.Application.bootstrap();  };  </script>    </body>  </html>

项目主页:http://www.open-open.com/lib/view/home/1412906056733