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 ...
随机推荐
- Web开发者の实用代码账簿
介里就都是恶魔菌整理的我平时会用的代码啦-现在在这里总结规划一下,希望能对你以及其他阅读这篇文章的小可耐们有帮助喵!欢迎订阅我的博客来get恶魔菌记事簿的新动态鸭! ↓ ↓ ↓ 以下就是内容啦~记得看 ...
- D. Frets On Fire 前缀和+二分
这个题真的难了我一天了,这种方法一开始没想出来,后来看了题解后明白了大致思路开始自己做但是!!!但是自己实现的时候老是一些细节出错!!!,调bug调了得有一个小时,蠢死了,这道题我一定要好好总结,总结 ...
- 20175324 2018-2019-2 《Java程序设计》第5周学习总结
20175324 2018-2019-2 <Java程序设计>第5周学习总结 教材学习内容总结 抽象类和具体类的区别在于抽象类中有抽象方法而具体类中没有.且抽象类不能实例化. 接口:如果一 ...
- Dev_GridView:使用PopupContainerControl实现下拉树形列表
要使用 DevExpress 实现下拉列表树,需要使用三个控件结合才可以实现 PopupContainerEdit.PopupContainerControl.TreeList 设置控件 PopupC ...
- Spring源码工程导入Eclsipse缺少两个jar文件
按照<Spring源码深度解析>所述,使用gradle cleanidea eclipse将Spring源码转为eclipse工程后,导入eclipse,最后发现还是缺少spring-cg ...
- 电子科技大学第九届ACM趣味程序设计竞赛(热身赛)题解
比赛地址:http://acm.uestc.edu.cn/#/contest/show/191 A题 小羽涂色 题意: 在x轴的正半轴上,问你是否存在一段区间[L,R]其中包含r个奇数和g个偶数. 分 ...
- 2sat
之前做的两发 https://vjudge.net/problem/UVALive-3211 #include<cstdio> #include<cstring> #inclu ...
- [Swift]LeetCode920. 播放列表的数量 | Number of Music Playlists
Your music player contains N different songs and she wants to listen to L (not necessarily different ...
- 【spring】静态资源的访问受限解决方法
前言 我们知道在整合spring mvc框架的时候需要在web.xml中配置一个servlet 代码如下 <!--spring mvc 的DispatcherServlet--> < ...
- 细说javascripe事件传播流程
当我们使用js时,经常会遇到事件传播流程的问题,下面我说一下我的观点. 在js触发某个事件时会相应生成一个事件对象,而这个事件对象则会根据DOM事件流的方向进传递,而传递的顺序如下图所示: 事件对象会 ...