前端框架撸起来——概述
前言
如今前端框架有很多,各式各样,学习使用成本也高,二次开发也非易事。如果自己设计一套前端框架,按照自己的想法和思路去写,做到使用方便,代码简洁,并非是一件难事。
下面我带大家一起撸一个中后台的前端框架,本系列主要是写撸框架的思路和主要代码,一些具体的实现,由于代码太长,文章中就省略一带而过。具体的代码可以移步gitee或github进行下载,感兴趣的请star支持。
本框架对于熟悉jQuery的同学来说,是一个不错的选择,既对jQuery有进一步的认识,又对JavaScript有更深的了解。
框架名称
小孩出生要取名字,一个新的框架也是如此,本框架名字取作“KUI”,没啥别的意思,K是取自Known的首字母。
框架地址
- Gitee: https://gitee.com/known/kui
- Github: https://github.com/known/kui
技术要求
实现本框架需要有如下技术背景:
- 要熟悉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
│ └── app.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);//呈现页面,由路由组件调用
}
}
下一章将带大家如何实现框架的组件和路由。