mvvm框架根源

  • 如果直接在html结构上绑定事件,事件处理函数无法获取到js中的作用域。想要获取T函数的作用域,必须在dom元素上绑定。将模板中的html解析dom树,然后遍历元素上的属性获取事件处理函数的标识,在进行绑定即可。

目前主流框架对事件绑定的实现思想大概有一下三类

1、特定的模板语法,使用Parser解析出来的AST(Abstract Syntax Tree在生成目标Dom树。

2、模板语法使用html,借助innerHTML让浏览器自己生成一个带有模板字符串的fakedomtree再生成DomTree

3、直接将模板内容写在js中,通过预处理的方式将模板字符串转换成虚拟dom解构的js代码,最终全生成DomTree

三类带来的问题

1、parser解析是在浏览器所以有性能问题,首屏渲染卡顿

2、过于依赖于浏览器

3、模板于js写在一起

4、局部更改会引起全页面重新渲染

问题的解决方案

局部更新(只渲染需要更新的地方)

1、将Dom元素与数据绑定在一起

2、对比数据变化前后生成的两个类dom结构树,将改变映射到真是的dom树上

带来的问题

1、观察者模式会会常驻内存,页面的复杂度越高,性能是个大问题

2、数据与dom无法形成绑定,另外一点diff算法至关重要

局部更新使用的检测方式

1、脏检查,主动遍历观察者,判断值是否发生变化

2、懒检测,劫持数据的改变行为,每当行为发生变化,做一次检测

3、不检测,不关心数据,只看前后两个类dom树的变化

大专栏  mvvm框架根源ss="headerlink" title="解决方案组合">解决方案组合

脏检查+1
脏检查+2
懒检测+1
懒检测+2
不检测+2

带来的代码结构复用问题

组件化
1、使用类来定义复用组件
组件定义:1、模板 2、状态 3、事件处理函数

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

class  {

constructor(options) {

this._template = options.template;

this._state = options.state || {}

}

}

//自定义组件

class UserInfo extends  {

constructor(options){

super(options);

Object.assign(this._state, {})

}

nextUser(){}

}

确定当前组件使用的作用域

2、使用函数来达到复用的目的
没有模板,也没有作用域的。因为模板在预处理阶段已经被转化成了声明虚拟Dom的js代码。

学习自知乎

原文地址:https://www.cnblogs.com/dajunjun/p/11711022.html

时间: 2024-10-11 00:15:14

mvvm框架根源的相关文章

vue.js学习笔记(一):什么是mvvm框架,vue.js的核心思想

一:MVVM框架 MVVM框架的应用场景:  1.针对具有复杂交互逻辑的前端应用 2.提供基础的架构抽象 3.提供ajax数据持久化,保证前端用户体验 二:vue.js的核心思想 (一):数据驱动 (二):数据响应原理 (三):组件化 (四)组件设计原则 1:页面上每个独立的可视/可交互区域视为一个组件 2:每个组件对应一个工程目录,组件所需要的各种资源在这个目录下就近维护 3:页面只不过是组件的容器,组件可以嵌套自由组合形成完整的页面

使用MVVM框架(avalonJS)快速开发运营活动

背景 在运营活动开发中,因为工作的重复性很大,同时往往开发时间短,某些情况下也会非常紧急,导致了活动开发时间被大大压缩,同时有些活动逻辑复杂,数据或者状态变更都需要手动渲染,容易出错,正是因为这些问题的存在,所以才有了MV*框架的诞生,比如大名鼎鼎的angularJS.今天就跟大家讲讲国产的MVVM框架avalonJS是如何快速进行开发的,同时大家也可以对比石器时代的开发模式(jquery或者zepto)与mv*模式的区别. avalonJS简介 avalonJS是前端大牛司徒正美开发和维护的m

mvvm框架实现问题记录

这里说的MVVM框架是指类似vue.avalon通过双向绑定.数据驱动的框架. 基本原理:通过defineProperties拦截数据的get,set:在dom模版加载时,扫描dom上的特殊命名的标签,生成对对应标签属性的取值函数和刷新函数:在对属性的表达式取值时,将刷新函数注册到相关联的表达式变量改变后的处理数组中,完成数据操作自动触发dom改变. 代码实现上根据http://www.cnblogs.com/Aaronjs/重写,代码稍有不一致, 代码地址:https://github.com

移动端mini mvvm框架实现

1,介绍 qvm概念,一个适用于移动端的mini mvvm(什么是mvvm?没了解的同学自己去了解)框架.参考了angular和vuejs的设计实现思路,并进行简化封装,目前使用的zepto基本依赖库,使用最少的代码实现了基础功能版. 2,为什么要做它    PC浏览器时代,实现mvvm有着麻烦的兼容性问题.而在移动浏览器时代,浏览器原生的支持可以让我们用最少的代码来实现一个mvvm框架库,来最大程度的减少移动端业务代码的开发工作.预计对于中大型的移动前端应用项目,使用mvvm能减少至少30%的

迷你MVVM框架 avalonjs 入门教程(司徒正美)

迷你MVVM框架 avalonjs 入门教程 关于AvalonJs 开始的例子 扫描 视图模型 数据模型 绑定属性与动态模板 作用域绑定(ms-controller, ms-important) 模板绑定(ms-include) 数据填充(ms-text, ms-html) 类名切换(ms-class, ms-hover, ms-active) 事件绑定(ms-on,……) 显示绑定(ms-visible) 插入绑定(ms-if) 双工绑定(ms-duplex) 样式绑定(ms-css) 数据绑

简单的介绍下WPF中的MVVM框架

最近在研究学习Swift,苹果希望它迅速取代复杂的Objective-C开发,引发了一大堆热潮去学它,放眼望去各个培训机构都已打着Swift开发0基础快速上手的招牌了.不过我觉得,等同于无C++基础上手学习C#一样,即使将来OC被淘汰,那也是N年之后的事情,如果真的要做IOS开发,趁现在Swift才刚开始,花那么几个月去了解一下OC绝对是一件有帮助的事情. 扯远了,我前几天刚接触到一个叫做mvvm的框架,发现很有意思,带着学习的态度来写点东西,不足之处一起研究.还有一个很重要的原因,我发现不少同

迷你MVVM框架 avalonjs 沉思录 第1节 土耳其开局

#cnblogs_post_body p{ text-indent:2em; margin-top: 1em; } 正如一切传说的开端那样,有一远古巨神开天辟地,然后就是其他半神喧宾夺主.我们对最巨贡献与创建力的远古巨神懵懂不知,却对巫师们的话语津津乐道.这同样也是我们前端的现实. MVVM是来自.NET,另一个遥远的界域.前端,相对于后端,怎么看都是蛮夷之地.JS这个肩负着前端一切交互工作的语言,竟然被视为恶魔,屡屡被屏蔽禁用.些微可用的脚本,变量与函数没有组织地野蛮生长着,直到JAVA的传教

MVVM框架思想

1.MVVM是什么? M:模型 V:视图 VM:视图模型 简单理解:mvc是一个cell面向一个model开发 mvvm是一个cell面向一个viewModel开发, viewModel里面又包含model mvvm优点:抽取方法更加的详细,业务逻辑划分更加明确,让控制器更加轻量级 缺点:不利于维护,可读性不太好 2.MVVM框架的使用(以计算不等高cell为例) 上面的分析指导,计算cell高度要在网络请求里面记性 2.1自定义一个topView模型 定义成员属性接收服务器返回(要展示到vie

在WPF的MVVM框架中获取下拉选择列表中的选中项

文章概述: 本演示介绍如何在WPF的MVVM框架中,通过数据绑定的方式获取下拉列表中的选中项.程序运行后的效果如下图所示: 相关下载(代码.屏幕录像):http://pan.baidu.com/s/1sjwN357 在线播放:http://v.youku.com/v_show/id_XODA5OTYzMDU2.html 温馨提示:如果屏幕录像和代码不能正常下载,可站内留言,或发邮件到[email protected] XAML代码如下所示: <Window x:Class="Demo02E