前端Mvvm QC 设计解析
QC 官网http://time-go.github.io/qc/
QC的具体用法、介绍和源码,大家可以去官网下载
从本节开始,我会和大家一起分享在这个框架设计中用到的技巧,希望这些技巧能个大家带来灵感,使大家能够在此基础上开发改造出适合自己的业务的框架。
阅读中遇到问题,可以去我的Q群参加讨论330603020
QC总览
绑定数据
数据绑定部分会讲QC如何通通过扫描,把数据和模版结合起来呈现的页面上,也会讲解这个页面初始化的时候怎么提升性能
页面元素是对应数据的对应表
大家都知道,mvvm框架是双向绑定的,当我们改变数据模型的值的时候,页面也跟着变化。为了实现这个效果,我们必须建立数据模型与页面元素的对应关系。这个关系在QC里是怎么建立的,又是怎么管理的,这节我们重点讲解。
双向绑定的实现
双向绑定的本质就是在页面的输入元素绑定个事件,但是QC是怎么处理的这个问题的?我们知道在页面绑定元素是比较耗性能的,QC又是怎么处理的?
setValue函数
setValue是QC的特有函数,只有通过这个函数改变数据模型。设计这个函数的时候应该考虑哪些问题?怎么才能保证用法简的同时又满足我们的功能需求?
数组处理
数组处理是mvvm的重头戏,我们在操作数据的时候会经常添加元素,我们新添加的元素怎么重新建立映射表?我们删除元素怎么重新生成映射表?
变量监控的实现
ve.$watch() 函数的实现
表达式的计算
我们在绑定我们的数据的时候要经常绑定表达式,QC 并不是用传统的eval来计算表达式,而是自己解析的。是基于性能和灵活的考虑,用我们自己的解析引擎比用eval有明显的性能提升,并且我们自己可以灵活的控制和扩展。比如(2+5)*6===[52,42,300]?['A','B','C'] 这样的表达式就是对传统三目运算的扩展,因为我们有时候会有很多状态的,我们的三目不够用了。当然这中情况也可以通过函数调用来解决
事件系统
为了追求性能,我们的事件都绑在了父元素上,比如说有有很多的click事件,我们的的框架只在父元素绑定了一个click事件。那么我们怎么管理这些事件。使这些事件能看起来像绑在本身的元素上呢?QC也支持事件扩展,因为我们有时候会遇到系统不支持的事件,如移动端的longtap,我们需要扩展。这节我会和大家讨论QC事件系统的设计技巧
控件开发接口设计
QC支持控件开发,也支持控件嵌套。父子控件之间都可以通讯,也可以双向绑定。这节我会和大家讨论控件这部分的代码设计,同时会和大家交流组件化开发到底好不好。
组件开发接口设计
QC的组件开发是一个自己创的概念,是以个比控件更松散的代码组织方式。也是我在开发中逐渐摸索出来的一种方式。这个也的代码实现比较简单,这节重点和代价讨论这种设计应用的场景还有这种设计到底好不好。
CommonJs规范代码实现
QC集成了一个简单的CommonJs规范,只有几十行代码。这节里我和大家一起实现一个简单的CommonJs规范
这系列的文章从今天起开连载...
前端Mvvm QC 设计解析的更多相关文章
- 前端MVVM框架设计及实现(二)
在前端MVVM框架设计及实现(一)中有一个博友提出一个看法: “html中使用mvvm徒增开发成本” 我想这位朋友要表达的意思应该是HTML定义了大量的语法标记,HTML中放入了太多的逻辑,从而增加了 ...
- js架构设计模式——前端MVVM框架设计及实现(二)
前端MVVM框架设计及实现(二) 在前端MVVM框架设计及实现(一)中有一个博友提出一个看法: “html中使用mvvm徒增开发成本” 我想这位朋友要表达的意思应该是HTML定义了大量的语法标记,HT ...
- js架构设计模式——前端MVVM框架设计及实现(一)
前端MVVM框架设计及实现(一) 最近抽出点时间想弄个dom模块化的模板引擎,不过现在这种都是MVVM自带的,索性就想自己造轮子写一个简单的MVVM框架了 借鉴的自然还是从正美的avalon开始了,我 ...
- 前端MVVM框架设计及实现
最近抽出点时间想弄个dom模块化的模板引擎,不过现在这种都是MVVM自带的,索性就想自己造轮子写一个简单的MVVM框架了 借鉴的自然还是从正美的Avalon开始了,我2013年写过一个关于MVC MV ...
- 前端Mvvm QC 上传了测试版
QC是一个前端MVVM框架,适合用来构建复杂的业务逻辑 项目地址:https://github.com/time-go/qc 技术支持QQ群:330603020 QC特点: 1.良好的浏览器兼容性(兼 ...
- 前端MVVM框架设计及实现(一)
最近抽出点时间想弄个dom模块化的模板引擎,不过现在这种都是MVVM自带的,索性就想自己造轮子写一个简单的MVVM框架了 借鉴的自然还是从正美的avalon开始了,我记得还是去年6月写过一个系列的av ...
- Kafka设计解析(一)Kafka背景及架构介绍
转载自 技术世界,原文链接 Kafka设计解析(一)- Kafka背景及架构介绍 本文介绍了Kafka的创建背景,设计目标,使用消息系统的优势以及目前流行的消息系统对比.并介绍了Kafka的架构,Pr ...
- Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告
本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/12/31/KafkaColumn5_kafka_benchmark 摘要 本文主要介绍了如何利用 ...
- Kafka设计解析(二)- Kafka High Availability (上)
本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/04/24/KafkaColumn2 摘要 Kafka在0.8以前的版本中,并不提供High Av ...
随机推荐
- 由一个订单推送想到了ObservableCollection的神奇用法
最近在做taobao的一个卖家应用,需要订阅taobao的订单推送,示例代码如下: 看到上面的OnMessage场景之后,我突然就鬼使神差的在想最近写的一个服务,其中的一个功能是需要定时的轮询一个集合 ...
- MySQL数据类型——数值类型
1.1.1 整型 整型 占用字节 范围 范围 tinyint 1 -27~27-1 -128~127 smallint 2 -215~215-1 -32768~32767 mediumint 3 -2 ...
- Qt使用自带的windeployqt 生成exe来发布软件
集成开发环境 QtCreator 目前生成图形界面程序 exe 大致可以分为两类:Qt Widgets Application 和 Qt Quick Application.下面分别介绍这两类exe ...
- Uploadify v3.2.1 参数说明
一.属性 属性名称 默认值 说明 auto true 设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 . buttonClass ” 按钮样式 buttonCursor ‘ ...
- [转]C#网络编程(异步传输字符串) - Part.3
本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part3.aspx 这篇文章我们将前进一大步,使用异步的方式 ...
- laravel administrator 一款通用的后台插件(PHP框架扩展)
前几天我看了一下zend framework 2的一些官方文档,也找了一些例子,可惜所有的资料少之甚少.于是我就开始去找这国外用的比较流行的PHP框架laravel,希望能够找到其合适的例子,而且我本 ...
- 初步了解Entity Framework
来源:http://www.cnblogs.com/Wayou/archive/2012/09/20/EF_CodeFirst.html Entity Framework的全称是ADO.NET Ent ...
- switch结构的用法
已知学生的名字和百分制分数.要求根据学生的百分制分数,分别采用"满分","优秀","良好","及格"和"不及格 ...
- 第28章 行为型模式大PK
27.1 策略模式 VS 命令模式 27.1.1 策略模式实现压缩算法 //行为型模式大PK——策略模式和命令模式 //实例:用策略模式实现压缩算法 #include <iostream> ...
- django复习笔记3:urls/views/templates三板斧
0.先看看文件结构 mysite/ mysite/ ├── __pycache__ │ └── manage.cpython-.pyc ├── blog │ ├── __init__.py │ ...