前端框架撸起来——概述

前言

如今前端框架有很多,各式各样,学习使用成本也高,二次开发也非易事。如果自己设计一套前端框架,按照自己的想法和思路去写,做到使用方便,代码简洁,并非是一件难事。

下面我带大家一起撸一个中后台的前端框架,本系列主要是写撸框架的思路和主要代码,一些具体的实现,由于代码太长,文章中就省略一带而过。具体的代码可以移步giteegithub进行下载,感兴趣的请star支持。

本框架对于熟悉jQuery的同学来说,是一个不错的选择,既对jQuery有进一步的认识,又对JavaScript有更深的了解。

框架名称

小孩出生要取名字,一个新的框架也是如此,本框架名字取作“KUI”,没啥别的意思,K是取自Known的首字母。

框架地址

技术要求

实现本框架需要有如下技术背景:

  • 要熟悉css样式表
  • 要熟悉JavaScript脚本语言
  • 要熟悉jQuery框架

框架目标

本框架的目标是依赖最少的第三方组件,使用最少的代码,约定大于配置。应满足以下功能:

  • 支持单页和多标签iframe页
  • 支持多语言、路由、组件和模块化
  • 支持文本框、下拉框、日期框、单选框、复选框、文本域、富文本框、弹窗选择框等
  • 支持弹出层、标签页、图表、树、列表、表单、表格、可编辑表格等
  • 内置登录页、后台框架页、通用增删改查页等

目录结构

KUI
├── static
│   ├── fonts
│   ├── img
│   ├── libs
│   │   ├── ztree
│   │   ├── datepicker
│   │   ├── echarts.min.js
│   │   └── wangEditor.min.js
│   ├── css
│   │   ├── font-awesome.css
│   │   └── kui.min.css
│   └── js
│       ├── jquery.min.js
│       └── kui.min.js
├── src
│   ├── components
│   │   ├── Form.js
│   │   ├── ...
│   │   └── Router.js
│   ├── langs
│   │   ├── en.js
│   │   └── zhCN.js
│   ├── kui.css
│   └── kui.js
├── bundleconfig.json
└── index.html

目录中只有一个html文件,其他的都是js和css文件。单页应用只有一个html文件,即index.html,这个文件的代码很简单,如下所示:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <meta name="renderer" content="webkit">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>KUI</title>
    <base href="/">
    <link rel="stylesheet" href="/static/css/font-awesome.css">
    <link rel="stylesheet" href="/static/css/kui.min.css">
</head>
<body>
    <div id="app"></div>
    <script src="/static/js/jquery.min.js"></script>
    <script src="/static/js/lang/zh-CN.min.js"></script>
    <script src="/static/js/kui.min.js"></script>
</body>
</html>

使用示例

框架建成后,易于使用和代码简洁是第一要求,我们期望的一个增删改查页面的代码应该是下面这样的:

function DemoPage() {
    var url = {
        QueryModels: baseUrl + '/Demo/QueryDemos',
        DeleteModels: baseUrl + '/Demo/DeleteDemos',
        SaveModel: baseUrl + '/Demo/SaveDemo'
    };
    var codes = ['选项一', '选项二'];
    //定义一个CRUD页面对象,栏位,按钮等
    var view = new View('Demo', {
        url: url,
        columns: [
            { field: 'Id', type: 'hidden' },
            { title: '文本', field: 'Text', type: 'text', required: true, query: true },
            { title: '日期', field: 'Date', type: 'date' },
            { title: '下拉框', field: 'Select', type: 'select', code: codes },
            { title: '复选框', field: 'Check', type: 'checkbox', code: codes },
            { title: '单选框', field: 'Radio', type: 'radio', code: codes }
        ],
        formOption: {},//表单选项
        gridOption: {  //表格选项
            toolButtons: ['add', 'edit', 'remove']
        }
    });
    
    this.render = function (dom) {
        view.render(dom);//呈现页面,由路由组件调用
    }
}

下一章将带大家如何实现框架的组件和路由。