AppBoxFuture(六): 前端组件化开发
前面几篇都是在介绍结构化与非结构化的数据存储,本篇换换口味介绍一下框架是如何实现前端组件化开发的。首先得感谢Vue、ElementUI等优秀的前端开源项目,这些项目帮助作者快速实现了框架的两个前端工程(IDE及Web应用)的开发。
当初框架的设计目标是:前端、后端、存储端统统一锅端,为什么这么设计,一方面是想减少开发人员对于开发环境及各类工具的安装配置时间,另一方面是想消除各端之间的集成调试问题,使开发人员更多的关注数据结构、业务逻辑、用户界面的设计与开发。为了达成这一目标,作者在框架的前端开发尝试过类似于Winform拖拉方式的界面生成,但发现灵活性受到了极大的限制。后来学习了Vue等项目,确认了框架集成Vue及ElementUI来用于前端用户界面开发的方案。
一.实现思路
由于框架的IDE是基于Web的,如何实现带智能提示的代码编辑及如何实现界面的即时预览成为一个小小的挑战(作者熟悉skia,gdi+等方式画用户界面,但不熟悉web前端)。
1.实现代码编辑器
作者一开始想到VS Code是基于Electron的就看了一下源码,结果发现微软从VS Code剥离了代码编辑器monaco-editor项目,具备了实现一个在线代码编辑器所需要的所有功能,而且惊喜的是monaco editor自带了Html\JS\CSS着色与智能提示。
2.实现即时预览
在大体了解了Vue的原理后,作者在IDE的视图设计器内实现了在线将Vue组件的代码编译转换为运行时代码,类似于Webpack分别将模版、脚本、样式编译然后组合在一起形成一个js包,设计时发给预览窗口动态加载,运行时则通过Vue的异步组件功能按需加载。
二.实现效果
1.组件开发
每个组件通过ViewModel关联,开发完全等同于在线Vue组件开发,这里不再过多描述。需要注意的是样式统一为Vue的局部样式(scoped)。
- Tip1: 在代码编辑内CMD+S保存, CMD+1,CMD+2,CMD+3分别切换模版、脚本、样式编辑;
- Tip2: 点击顶部"Preview"在右侧显示预览窗口;
- Tip3: 框架集成的ElementUI组件均注册为全局组件,且前缀为e-xxxx,非默认的el-xxxx。
2.组件组合
组合其他子组件时,需要先在脚本内注册局部组件,如下图所示:

然后在模版内放置注册的子组件,如下图所示:

3.组件路由
每个视图模型默认是不加入路由表的(sys.Home例外是默认的主页),如果在运行时需要通过浏览器地址栏直接访问视图模型,必须将视图模型加入路由表,如下图所示:

- Tip1: 自定义路径如果为空,则使用默认路径,如http://地址/app/index.html#/sys/EmploeeList;不为空则为http://地址/app/index.html#/{自定义路径};
- Tip2: 自定义名称支持多级,如: PersonInfo/Address。
4.服务集成
框架支持两种方式调用服务模型进行业务逻辑处理:
4.1 异步await方式:

4.2 异步Promise方式:
export default class Home extends Vue {
onclick() {
sys.Services.HelloService.SayHello().then(res => {
this.$message.info(res);
}).catch(err => {
this.$message.error(err);
});
}
}
5.组件调试
本想跟服务模型一样在服务端跑一个调试进程,但考虑实现复杂暂直接利用浏览器的调试功能。另由于作者的半吊子Web前端水平,暂没有搞定sourcemap,所以浏览器调试器内显示的源码是视图设计器编译转换过后的,比较丑陋,具体参考下图所示:

- Tip: 在调试器Sources面板快捷键CMD+p然后输入{应用名}.{视图名}如sys.Home.js可以快速定位编译转换后的源码。
三.本篇小结
目前实现的部分用来开发网站、中后台系统、微信公众号之类的应用是没有问题的,待将来Google开源了Hummingbird后作者还想在IDE内实现移动App的用户界面开发。目标很远大,道路还很漫长,待作者整理好前端工程的代码后将率先开源,希望感兴趣的同志共同参与。如果您有问题或Bug报告,请留言或在Github提交Issue。
AppBoxFuture(六): 前端组件化开发的更多相关文章
- Webpack+Vue+ES6 前端组件化开发mobile-multi-page应用实战总结
本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws 一.写在前面 项目上线有一段时间了,一个基于webpack+vue+ES6的手机端多页面应用 ...
- Webpack+Vue+ES6 前端组件化开发mobile-multi-page应用实战总结和踩坑
本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws 一.写在前面 项目上线有一段时间了,一个基于webpack+vue+ES6的手机端多页面应用 ...
- 前端笔记之JavaScript面向对象(四)组件化开发&轮播图|俄罗斯方块实战
一.组件化开发 1.1组件化概述 页面特效的制作,特别需要HTML.CSS有固定的布局,所以说现在越来越流行组件开发的模式,就是用JS写一个类,当你实例化这个类的时候,页面上的效果布局也能自动完成. ...
- 从DOM操作看Vue&React的前端组件化,顺带补齐React的demo
前言 接上文:谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo 上次写完博客后,有朋友反应第一内容有点深,看着迷迷糊糊:第二是感觉没什么使用场景,太过业务化,还不如直接写Vue ...
- 谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo
前言 前端已经过了单兵作战的时代了,现在一个稍微复杂一点的项目都需要几个人协同开发,一个战略级别的APP的话分工会更细,比如携程: 携程app = 机票频道 + 酒店频道 + 旅游频道 + ..... ...
- Vue.js:轻量高效的前端组件化方案
转发一篇尤老师对vue.js的介绍,了解vue.js的来龙去脉.不过现在已经是2.0了,也有添加一些新的东西,当然有些东西也改了. Vue.js:轻量高效的前端组件化方案 Vue.js 是我在2014 ...
- vue.js组件化开发实践
前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...
- 【转】Web应用的组件化开发(一)
原文转自:http://blog.jobbole.com/56161/ 基本思路 1. 为什么要做组件化? 无论前端也好,后端也好,都是整个软件体系的一部分.软件产品也是产品,它的研发过程也必然是有其 ...
- vue(9)—— 组件化开发 - webpack(3)
前面两个终于把webpack相关配置解析完了.现在终于进入vue的开发了 vue组件化开发预热 前期准备 创建如下项目: app.js: footer.js: main.js: webpack.con ...
随机推荐
- Oracle (分类、数据库类型、序列)
分类: 1.DDL (定义语句) create .alter .drop 不需要commit create table aaa( tt1 varchart ) 2. DML (操纵语句) lnset ...
- Hadoop-HA机制工作原理
一.Hadoop 系统架构 1.1 Hadoop1.x和Hadoop2.x 架构 在介绍HA之前,我们先来看下Hadoop的系统架构,这对于理解HA是至关重要的.Hadoop 1.x之前,其官方架构如 ...
- ckeditor+ckfinder
官方地址:http://ckeditor.com/ 复制ckeditor和ckfinder的文件夹到项目根路径下 拷贝ckfinder的config.xml到WEB-INF下 <config&g ...
- Linux 系统中的内部与外部命令
linux中的命令大致可分为两类,内部命令和外部命令: 内部命令(builtin command):也称shell内嵌命令 外部命令(external command):存放在一个文件中,使用时需要去 ...
- 【数据结构】红黑树与跳表-(SortSet)-(TreeMap)-(TreeSet)
SortSet 有序的Set,其实在Java中TreeSet是SortSet的唯一实现类,内部通过TreeMap实现的:而TreeMap是通过红黑树实现的:而在Redis中是通过跳表实现的: Skip ...
- Oracle 存储过程 PROCEDURE
存储过程 一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一 ...
- MySql解除安全模式:Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.
在修改一条数据字段时报错: Error Code: 1175. You are using safe update mode and you tried to update a table witho ...
- nmon监控分析
一.下载软件安装 wget http://sourceforge.net/projects/nmon/files/nmon_linux_14i.tar.gz tar xf nmon_linux_14i ...
- 问题:win7下配置好服务器就是不能查询数据库。(已解决)
我用C写访问mysql的CGI程序,可以执行. 但是,当我写好网页再去访问这个CGI,出现下面的错误 我的环境是:IIS作为服务器,MYSQL数据库,VC++6.0写CGI. 跟踪了一下,发现只要我调 ...
- ML-Framework:ML.NET 0.3 带来新组件
ML.NET在今年微软在Build 2018 会议上宣布的机器学习框架现已正式推出0.3版本 https://github.com/dotnet/machinelearning/releases/ta ...