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 设计解析的更多相关文章

  1. 前端MVVM框架设计及实现(二)

    在前端MVVM框架设计及实现(一)中有一个博友提出一个看法: “html中使用mvvm徒增开发成本” 我想这位朋友要表达的意思应该是HTML定义了大量的语法标记,HTML中放入了太多的逻辑,从而增加了 ...

  2. js架构设计模式——前端MVVM框架设计及实现(二)

    前端MVVM框架设计及实现(二) 在前端MVVM框架设计及实现(一)中有一个博友提出一个看法: “html中使用mvvm徒增开发成本” 我想这位朋友要表达的意思应该是HTML定义了大量的语法标记,HT ...

  3. js架构设计模式——前端MVVM框架设计及实现(一)

    前端MVVM框架设计及实现(一) 最近抽出点时间想弄个dom模块化的模板引擎,不过现在这种都是MVVM自带的,索性就想自己造轮子写一个简单的MVVM框架了 借鉴的自然还是从正美的avalon开始了,我 ...

  4. 前端MVVM框架设计及实现

    最近抽出点时间想弄个dom模块化的模板引擎,不过现在这种都是MVVM自带的,索性就想自己造轮子写一个简单的MVVM框架了 借鉴的自然还是从正美的Avalon开始了,我2013年写过一个关于MVC MV ...

  5. 前端Mvvm QC 上传了测试版

    QC是一个前端MVVM框架,适合用来构建复杂的业务逻辑 项目地址:https://github.com/time-go/qc 技术支持QQ群:330603020 QC特点: 1.良好的浏览器兼容性(兼 ...

  6. 前端MVVM框架设计及实现(一)

    最近抽出点时间想弄个dom模块化的模板引擎,不过现在这种都是MVVM自带的,索性就想自己造轮子写一个简单的MVVM框架了 借鉴的自然还是从正美的avalon开始了,我记得还是去年6月写过一个系列的av ...

  7. Kafka设计解析(一)Kafka背景及架构介绍

    转载自 技术世界,原文链接 Kafka设计解析(一)- Kafka背景及架构介绍 本文介绍了Kafka的创建背景,设计目标,使用消息系统的优势以及目前流行的消息系统对比.并介绍了Kafka的架构,Pr ...

  8. Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/12/31/KafkaColumn5_kafka_benchmark 摘要 本文主要介绍了如何利用 ...

  9. Kafka设计解析(二)- Kafka High Availability (上)

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/04/24/KafkaColumn2 摘要 Kafka在0.8以前的版本中,并不提供High Av ...

随机推荐

  1. Javascript之旅——第六站:看看writable特性

    说起js中的那些特性标记,总觉得有些怪怪的,那为什么要说到这个attribute,起源于对一个问题的疑问,我们都知道window对象其实就是 浏览器窗口的一个实例,既然是一个实例,那这个实例就应该有“ ...

  2. 【CSharp】C#中equals与==小记

        序:        昨天技术群中的一个小伙伴发了几个字符串以及值类型比较的面试题,没想到我们的答案不尽人意...下面是截图以及答案,看看与各位看官的答案是否相同.                ...

  3. 控制非模态弹出框(showModelessDialog)唯一且随父页面关闭

    网站开发中,常常会遇到需要弹出窗体的情况,一般弹出框有模态和非模态两种,如下: 模态:window.showModalDialog() 非模态:window.showModelessDialog() ...

  4. plain framework 1 pak插件说明(资源压缩加密)

    在互联网的发展中,资源的整理一般成了发布软件应用的迫在眉睫的一件事情,不经打包的资源往往容易暴露而且众多的文件使得拷贝等待时间变长.在这种情况下,一种应用便诞生了,其起源是源自压缩软件,这便是我们今天 ...

  5. 求最大边/最小边的比值最小的路径 codevs 1001 舒适的路线

    codevs 1001 舒适的路线 2006年  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description Z小镇是一个景色宜人 ...

  6. Codeforces Round #283 Div.2 D Tennis Game --二分

    题意: 两个人比赛,给出比赛序列,如果为1,说明这场1赢,为2则2赢,假如谁先赢 t 盘谁就胜这一轮,谁先赢 s 轮则赢得整个比赛.求有多少种 t 和 s 的分配方案并输出t,s. 解法: 因为要知道 ...

  7. UNITY在VS中调试

    下载地址:https://visualstudiogallery.msdn.microsoft.com/site/search?f%5B0%5D.Type=RootCategory&f%5B0 ...

  8. idea常用快捷键

    十大Intellij IDEA快捷键 2015-01-16 21:31 122307人阅读 评论(38) 收藏 举报 本文章已收录于: .embody { padding: 10px 10px 10p ...

  9. php一句话后门过狗姿势万千之传输层加工【三】

    既然木马已就绪,那么想要利用木马,必然有一个数据传输的过程,数据提交是必须的,数据返回一般也会有的,除非执行特殊命令. 当我们用普通菜刀连接后门时,数据时如何提交的,狗狗又是如何识别的,下面结合一个实 ...

  10. understand一些功能

    功能 支持分析的语言 统计总的代码数据 统计单个文件的数据 分析代码复杂度 分析代码格式 文件的依赖关系 文件夹依赖关系 文件夹包含关系.代码量 understand提供了很多图表,同时它可以根据源码 ...