【前言】
长久以来,凭借一股热情,作为一个半路信佛(尚未出家)的中年野和尚,一直在自学asp.net mvcX,希望有朝一日能写出一个简单的小微企业内部使用的动态网站出来——这是我粗浅的理想。
紧跟微软是我的选择,这是因为微软太牛逼,敢于把任何复杂的东西傻瓜化(效果另论),这种牛气冲天的精神,我表示深深折服。何况我现在盗版的庞大的VisualStudio系列用着,何止一个爽字了得(VS也有express版的,懒得下)。当然,有免费的我尽量不用盗版,比如sqlserver我就只用express版……扯远了,支持正版。
【为什么MVVM】
asp.net mvc从3.0到4.0(现在5.0也出来了),感觉写网站确实比从前要方便多了。技术更新速度也挺快。尤其是mvc3让人感动地引入了razor语法,再写view时那抑制不住骚动的心,当浮一大白。
因MVC关注点分离的特性,写view时就其实有更多便利的方式可供选择,也就是说,其实用微软自己的razor语法已经很方便了,但真正实际开发时,为提高效率等,仍然迫切需要配合jquery来做好前端。而jquery近些年的大量使用,令不甘寂寞的程序员们大为光火,如你所知,程序员是最懒的一帮子人了(他们为了节省时间哪怕按毫秒记,节省操作哪怕能少点一下鼠标,废寝忘食,以变态的方式改进程序哪怕一点点进步,敬佩),他们在以“懒”推动着技术的进步。他们称用Jquery陷入了dom操作的泥淖,必须尽早拔出脚来,我们的征途是星辰大海。
于是,各种MVVM框架出来了(什么是MVVM,请度娘之),微软在asp.net mvc4中,也贴心地默认附上了knockout.js,这是微软矢志不渝搞傻瓜化的表现之一。可惜knockoutjs谈不上好用,我也大概找了一些资料,有不少东西难以理解,源码也根本看不懂。
除此之外,还有其它框架emberjs,还有高大上的angular等等,不一而足。这些东西都是好的,但对于我的征途只是门前菜地的中年野和尚来说,入门太费劲了。
【avalon】
博客园里有位大牛名叫司徒正美,他基于对knockout的深入研究(据说avalon的早期版本),写了一个MVVM框架:avalon,目前版本0.99x,我试用了一段时间,只想说四个字:牛逼死了。如果这个框架能让更多人应用,并且一统江湖千秋万代鸟生鱼汤,我还要再加四个字:请带上我。
avalon到底是什么呢?它是和knockout,angular等都有点儿像又不太像的,同步视图的东西。当然这个概念并不准确,但便于理解。avalon在asp.net mvc中的应用,简单来讲,就是view视图中,实现dom元素与数据的绑定,把程序员的关注点放到“数据”上,而不是“dom”上。对数据的更改,可以立即反应到页面表现上。
【第一个例子】
司徒大牛自己写的第一个例子如下:
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title></title>
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
6 <script src="avalon.js"></script>
7 </head>
8 <body>
9 <div ms-controller="box">
10 <div style=" background: #a9ea00;" ms-css-width="w" ms-css-height="h" ms-click="click"></div>
11 <p>{{ w }} x {{ h }}</p>
12 <p>W: <input type="text" ms-duplex="w" data-duplex-event="change"/></p>
13 <p>H: <input type="text" ms-duplex="h" /></p>
14 </div>
15 <script>
16 avalon.define("box", function(vm) {
17 vm.w = 100;
18 vm.h = 100;
19 vm.click = function() {
20 vm.w = parseFloat(vm.w) + 10;
21 vm.h = parseFloat(vm.h) + 10;
22 }
23 })
24 </script>
25 </body>
26 </html>
我来解释一下:使用avalon的三板斧:
- 在view页面中引用avalon.js文件(asp.net mvc4也可以写到BundleConfig里)。
- 在<script>里定义视图模型vm(关于这个vm,可是大有学问,话说我理解它足足用了特么两个星期,说明什么?我笨?你出去。后面我会专门开辟一节讲这个vm,这是个重点),即 avalon.define("box",function(vm){}),这个“box”是准备用来控制影响范围的标识,名字随便起个有意义的容易记的就好。
-
define的回调函数里,对vm的各个属性赋值。最后不要忘了加一个扫描avalon.scan(); 但司徒老大的这个例程里怎么没这句?奇怪。
以上是js部分,在html里还要在dom元素上添加一些特有属性,实现绑定。
首先介绍一下{{}},这两个大括号括起来是插值运算符,是一种单向绑定,也就是说,可以把vm中的定义的数据,刷新到视图中。比如vm.w=100;在html中写{{w}},那么框架会把{{w}}替换为vm.w的值100。如果想在视图界面中更改这个w值,并回传给vm数据怎么办?好了,我们在交互方面非常重要的ms-duplex出马啦。ms-duplex是双向绑定函数,常用于input标签中,对数据的绑定,在input中对它的修改会立即反应到vm中去。
说到这里,估计你就明白了。其实IT界所有的技术进步,几乎无一不是为了让一切变得更简单(当然,前提是要功能满足需求),MVVM实现了view和vm的绑定和代码分离,耦合减少,实为前端coder不可多得的致命法宝。
不过,你用我上面写的几行东西,还是跑不起来,有个ms-controller你别忘了,它也要加到html中,你认为vm要在这个范围内起作用的dom元素中去。上面例程中的名字是"box"。另外,关于ms-controller还有一些知识,比如它可以嵌套,还会自动向上寻找等等,如果你们是多人开发,而且还有猪一样的队友,介绍你认识ms-important绝不会错。猛戳这里:http://rubylouvre.github.io/mvvm/avalon.important.html
下一节,我会写一个asp.net mvc4下的第一个例程,来告诉你如何从后台拿数据到前台来绑定,顺便介绍一些avalon的常用api。敬请期待……
分享到:
相关推荐
之前在一家公司里用过Knockout,是easyui 和 Knockout结合 的。下面的这本应该不错。 目录 前言 第一部分入门指南 第1章MVC介绍 创建第一个项目 分析HomeController 分析View 理解URL结构 小结 第2章...
基于.net使用CommunityToolkit_mvvm实现mvvm的代码,用最简单的代码,实现mvvm最基本的功能,MvvmLight已经不更新了,现在推荐使用这个库了
基于NET6框架下采用WPF+MVVM进行的UI设计。 主要实现了是仿360软件下载类似功能的界面设计,主要是下载进度条的动态化。 适合人群: 刚接触WPF的新人 能学到什么: WPF自定义控件、样式、MVVM、异步线程等 阅读建议...
Asp.Net WebAPI, Asp.Net MVC,JSON Asp.Net Routing, MVVM,DOM HttpModule, HttpHandler, Ajax Jquery JS,Knockout JS 内容提纲如下: 1.三种Web服务主流架构的历史演变与示例。(XML-RPC,SOAP,REST...
MVVM模式结合MVVMlight框架的应用 程序=数据结构+算法 面向对象=对象+对象之间关系 1.以数据为中心的开发方式。 1)Model:定义一个数据结构。 关键代码:实现接口INotifyPropertyChanged 2)ViewModel:定义算法...
上一篇得到大家的关注,非常感谢。由于自己对于这些模式的理解也是有限,对于这些模式的比较,是结合自己的理解,一些地方不一定准确,但是只有亮出自己的观点,才能抛砖引玉不是? 欢迎各位拍砖。:) 代码如下:阅读...
Android mvc+mvp+mvvm项目实现示例,简单说明。Android如何在项目中实现mvc、mvp、mvvm这三种模式。
mvc mvp mvvm
包含一个PPT(mvc->mvp->mvvm的概念,优缺点),一份源码(观察者模式,事件系统,mvc,mvp,mvvm的demo)
ReactiveUI - 一个.Net的MVVM的框架它集成了Reactive Extensions (Rx)框架。使开发人员可以构建优雅,可测试的应用程序使用 WPF, Windows Store Apps, WP8 or Xamarin。
asp.net MVVM工具
1、asp.net mvc 4.0用于提供页面服务 2、asp.net web api用于提供restful数据服务 3、fluentData新型轻量级ORM模型用于数据持久方案 4、log4net作为日志组件 5、json.net作为序列化组件 6、文档方案(均为开源...
基于司徒大神的轻量级MVVM框架avalon2.0搭建的一个简易的脚手架。
MVC4 项目包含一个示例,该示例展示了如何在 ASP.NET MVC 中使用 Knockoutjs 和 papify.mvc 创建一个 ajax 分页数据表。##现在的目标添加 OrderBy 功能在构造函数中应用绑定空行功能与用于排序的无容器 Knockoutjs ...
WPF应用程序 .net4.5框架 +MvvmLight +Sqlite 实现数据增加删除即时更新到datagrid,非常实用的入门级小数据操作应用程序,源码上传可以参考使用
准备基于ExtJs6.0.2搭建一个平台,基础结构先放一个.
谈谈MVC和MVVM1
MVC MVP MVVM
精简的js技巧使Asp.Net MVC4 UI开发更容易的提示。
WPF(.Net Core 3.1)基于MVVM+View2D,3D(医疗)模板应用