Skip to content
Hex edited this page Jan 28, 2014 · 6 revisions

什么是组件?

Transformers 框架的组件是组成系统最基本的部件。组件具有完全独立的功能,每个组件都包括独立的行为、展现和数据。

Transformers 的应用都是由一个一个的组件组合而成的,这很像积木玩具一样,每个组件就是一块积木,做出各种各样的积木就可以搭建起完整的系统了。

组件的组成

组件一般包含:

  • 控制器
  • 视图
  • 数据

组件的容器

通过上面的讲解,我们了解到一个应用程序是由一个一个独立的组件组成的,那么,我们开发了一个又一个的组件,但是怎么把这些组件组装起来呢?在浏览器中如何呈现给用户呢?这就需要一个组件容器

简单来讲,组件容器就是一个普通的 HTML 页面,这个页面可以是静态的 HTML 代码,也可以是由服务端生成的 HTML 页面。组件容器通常来说就是网站的首页(如 index.html)。

我们在组件容器中声明我们需要在这个容器中使用的所有组件,然后系统就会根据用户的设置自动的载入所有组件,当然你也可以声明某些组件只在使用的时候再载入。

下面我们就来看看一个实际的组件容器是什么样子的。

例子

打开编辑器,创建一个名为 index.html 的文件,写入以下代码:

<!doctype html>
<html>
<head>
    <title>Hello World</title>
    <meta charset="utf-8" />
    <script src="http://javascript.u.qiniudn.com/qwrap/115.js"></script>
    <script src="http://javascript.u.qiniudn.com/qwrap/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.Component.Home = TF.Core.ComponentMgr.create({
    // 组件 DOM 准备就绪会调用 DomReady 方法
    DomReady: function() {
        console.log('ready!');
    },

    // Action 是组件对外的接口
    testAction: function(args) {
        console.log('test!');

        // 渲染静态模板
        this.sys.renderStaticTemplate('content');

        this.renderOk();
    },

    // 组件私有方法,外部无法访问
    renderOk: function() {
        console.log('render OK!');
    }
});

TF.Core.ComponentMgr.add([{
    name: 'Home',
    appendRender: false,
    lazyRender: false,
    hide: false,
    applyTo: '#content'
}]);

TF.Ready = function(){
    TF.Core.Application.bootstrap();
};
</script>

</body>
</html>

用浏览器打开 index.html 就可以看到效果了。其中如何定义组件控制器、如何编写组件视图等,请访问相关章节。

Clone this wiki locally