`

轻量级前端MVVM框架avalon - 整体架构

阅读更多
原帖地址:http://www.cnblogs.com/aaronjs/p/3143641.html

官网提供架构图



 


单看这个图呢,还木有说明,感觉有点蛋疼,作者的抽象度太高了,还好在前面已经大概分析过了执行流程


如图



  • 左边是View视图,我们就理解html结构,换句话就是说用户能看到的界面,渲染页面,绑定事件,切换类名,什么脏活都揽

  • 右边是ViewModel 视图模式,就是开发者通过avalon.define("xxx", function(vm){vm.firstName = "模型"})

  • 既然是MVVM 那么还有个M跑哪里去了,M在MVVM定义中,M只是一个过客,被VM给再次包装,它与其他表示业务状态的东西融入VM(ViewModel)中,一个普通的JS对象,可能是后台传过来的,也可能是直接从VM中拿到 vm.firstName = "模型" 这个就是M咯,所以作者在图中就没体现出来吧


从定义ViewModel开始,扫描到vm关联的东东 形成访问器,好吧其实整个就这么简单


打开avalon源码,我们就看到这样的结构



(function(DOC) {

内部代码

})(document);


这种基本的结构虽然已经被写烂了 ,但是既然是分析就从来到位来一遍吧.


自调用匿名函数


jquery为例



  1. 这是一个自调用匿名函数。什么东东呢?在第一个括号内,创建一个匿名函数;第二个括号,立即执行

  2. 为什么要创建这样一个“自调用匿名函数”呢?


   通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。这点非常有用也是一个JS框架必须支持的功能,jQuery被应用在成千上万的JavaScript程序中,必须确保jQuery创建的变量不能和导入他的程序所使用的变量发生冲突。 


     3.  匿名函数从语法上叫函数直接量,JavaScript语法需要包围匿名函数的括号,事实上自调用匿名函数有两种写法



写法1
(function() {
console.info(
this );
console.info( arguments );
}( window ) );

写法2
(
function() {
console.info(
this );
console.info( arguments );
})( window );


 


       4.为什么要传入window呢?


       通过传入window变量,使得window由全局变量变为局部变量,当在jQuery代码块中访问window时,不需要将作用域链回退到顶层作用域,这样可以更快的访问window;这还不是关键所在,更重要的是,将window作为参数传入,可以在压缩代码时进行优化,看看jquery-1.6.1.min.js:



(function(a,b){})(window); // window 被优化为 a


     5.为什么要在在参数列表中增加undefined呢?


     在 自调用匿名函数 的作用域内,确保undefined是真的未定义。因为undefined能够被重写,赋予新的值。



undefined = "now it's defined";
alert( undefined );


浏览器测试结果:



       6.注意到源码最后的分号了吗?


        分号是可选的,但省略分号并不是一个好的编程习惯;为了更好的兼容性和健壮性,请在每行代码后加上分号并养成习惯。


 


总体架构


按代码结构



    (function(DOC) {

//命名空间
avalon = function(el) {
return new avalon.init(el);
};

//avalon挂在工具函数

// 迷你jQuery对象的原型方法

//css操作相关的方法

//ecma262兼容补丁

//nextTick 高级定时器

//Observable 观察者模式

//Define 模型定义方法

//Parse 解析求值函数与执行作用域

//Scan 节点扫描

//Bind html自定义标签绑定处理方法

})(document);


整个结构基本如上


以后会分析具体的每个实现,源码分析尽量到行...

本文链接

分享到:
评论

相关推荐

    基于司徒大神的轻量级MVVM框架avalon20搭建的一个简易的脚手架

    本文将深入探讨基于司徒大神创建的轻量级MVVM框架——Avalon2.0,如何搭建一个简易的脚手架。Avalon2.0是一个成熟的JavaScript框架,它为开发者提供了构建复杂前端应用的能力,尤其适用于单页应用程序(SPA)的开发...

    WPF 轻量级 MVVM 框架入门 2.1.2

    **WPF轻量级MVVM框架入门2.1.2** 在Windows Presentation Foundation(WPF)开发中,MVVM(Model-View-ViewModel)模式是一种常见的设计模式,它有助于实现应用程序的视图与业务逻辑之间的解耦。MVVM通过数据绑定、...

    轻量级MVVM框架Vue.js快速上手视频教程下载

    Vue.js是一套构建用户界面的轻量级MVVM框架,与其他重量级框架不同的是, Vue.js 的核心库只关注视图层,并且非常容易学习,很容易与其它前端技术或已有的项目整合。 本系课程,主要分为两部分完成。第一部分:掌握...

    winform上的mvvm框架--升级版(动态代理)

    在本文中,我们将深入探讨如何在WinForm应用中利用MVVM框架,并且通过引入Castle动态代理来提升效率和代码复用性。标题“winform上的mvvm框架--升级版(动态代理)”揭示了我们将在WinForm环境中实现一个基于MVVM...

    wpf-mvvm-DeskTop-Sample-master_C#_WPF_wpf客户端zfs_

    标题中的“wpf-mvvm-DeskTop-Sample-master”表明这是一个关于WPF(Windows Presentation Foundation)桌面应用程序的示例项目,使用了MVVM(Model-View-ViewModel)设计模式。这个项目是用C#编程语言编写的,面向的...

    Cpage.js是一款轻量级的前端MVVM框架,使用TypeScript开发.zip

    Cpage.js是一款轻量级的前端MVVM框架,使用TypeScript开发.zip

    迷你MVVM框架---avalonjs.html

    一个迷你框架

    MvvmLight-Sample-master.zip

    MvvmLight(Model-View-ViewModel Light)是由GalaSoft公司开发的一个轻量级的MVVM(Model-View-ViewModel)库,广泛用于Windows桌面应用、UWP、Xamarin和 Uno 平台的开发。 MVVM是一种设计模式,它鼓励分离应用...

    avalon-1.4.5.zip

    作为国内前端开发者熟知的框架,avalon.js以其轻量级、高性能和易用性,赢得了众多开发者的青睐。本文将基于"avalon-1.4.5.zip"资源包,深入探讨avalon.js的核心特性和实际应用。 一、avalon.js简介 avalon.js是由...

    Android mvvm 框架,最流行的mvvm demo

    - **Kotlin Coroutines**:用于处理异步操作,提供轻量级的协程,避免回调地狱,提高代码可读性。 - **Koin** 或 dagger-hilt:依赖注入库,简化对象的创建和管理,降低组件间的耦合度。 项目krismileMvvm-master...

    前端mvvm组件化框架

    在现代Web开发中,前端MVVM(Model-View-ViewModel)组件化框架已经成为了主流,它们极大地提高了开发效率,降低了代码复杂性。本篇文章将详细探讨"前端MVVM组件化框架"这一主题,重点关注JavaScript开发中的框架...

    MVVMDemo---listView的使用.rar

    在Android开发中,MVVM(Model-View-ViewModel)架构是一种流行的设计模式,它将业务逻辑、用户界面和数据模型分离,提高了代码的可测试性和可维护性。本示例"MVVMDemo---listView的使用"着重展示了在MVVM架构下如何...

    Cpagejs是一款轻量级的Mvvm框架使用TypeScript开发

    Cpage.js是一款轻量级的Mvvm框架,使用TypeScript开发,可以方便地进行组件化开发,语法统一、简介明了,不依赖于第三方框架,适合中小项目开发。框架同时支持es5与es6语法,可参考example中示例。

    一个轻量级mvvm框架源码+项目说明(符合Material Design风格,Kotlin 语言编写).zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用!...一个轻量级mvvm框架源码+项目说明(符合Material Design风格,Kotlin 语言编写,使用Retrofit+协程+Flow网络请求等优秀的开源框架).zip

    .NET-MVVMSidekick一个基于RX与await等新技术的轻量级MVVM框架

    .NET-MVVMSidekick是一个专为.NET开发者设计的轻量级MVVM(Model-View-ViewModel)框架,它充分利用了Reactive Extensions (RX) 和 `async/await` 等现代编程技术,以提高应用程序的可维护性、响应性和开发效率。...

    轻量级的mvvm框架-Android开发

    轻量级的mvvm框架Yox与Vue一样,但是比Vue更轻量且易于使用。 关键功能是Yox支持IE6。 QQ组:232021930安装CDN

    MVVM模型---PPT

    * Prism:一种基于 MVVM 模型的框架,提供了更多的功能和工具。 MVVM 模型在 Silverlight 和 WPF 中的应用 MVVM 模型在 Silverlight 和 WPF 中得到了广泛的应用,因为这两个平台都支持 XAML 数据绑定和命令绑定。...

    轻量级性能MVVM管理UI框架,图表折叠模态导航菜单分页进度条评级时间轴Toast.zip

    轻量级性能MVVM管理UI框架,图表折叠模态导航菜单分页进度条评级时间轴ToastVue-Bulma轻量级性能MVVM管理UI框架演示网址https://admin-c79b5.firebaseapp.com/admin/index截屏构建设置# 安装依赖包npm install# 开发...

    轻量级MVVM框架Vue.js快速上手(MVVM、SEO单页面应用、SSR服务器端渲染、Nuxt.js)

    分享视频教程——轻量级MVVM框架Vue.js快速上手(MVVM、SEO单页面应用、SSR服务器端渲染、Nuxt.js) 本系课程,主要分为两部分完成。第一部分:掌握Vue.js设计规范的语法。 第二部分:通过一些实际的前端案例来强化...

Global site tag (gtag.js) - Google Analytics