经过难苦奋战,avalon2终于面世了。这花了大半年时间,其中1.6还胎死腹中。长达半年没有产出,我都担心自己会被裁掉……

avalon2许多API与1.4.×保持一致,当然也添加了一些1.5的功能,此外随着react的红红火火,对它的研究,也集成到此框架中。

我们先来一个简单的例子

 <!DOCTYPE html>
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="./dist/avalon.js"></script>
<script>
var vm = avalon.define({
$id: "test",
a: 111
})
</script>
<style>
.ms-controller{
display:none;
}
</style>
</head>
<body>
<div ms-controller="test">
<input ms-duplex="@a" />
<p>{{@a}}</p>
</div>
</body>
</html>

如果大家学过avalon1.*就好办,没学也没关系。作为时下兼容性最好的MVVM框架,avalon绝对是值得你进行智力投智的。

avalon.define要求入传一个带$id属性的对象,它会返回一个vm的特殊对象,以后我们对它进行赋值就会自动同步页面。这比jQuery每次都取CSS选择器来找元素进行操作方便多。

这也就是为什么MVVM框架一下子铺天盖地的火起来的原因。

这是JS部分,在页面部分,或者叫HTML部分,我们需要一些特殊标记来圈定这个vm的作用范围,这就是ms-controller的出场。$id也是在这里用到的。

在这作用范围内,我们还有另外两个指令,一个是ms-duplex指令,相当于ng-model(如果大家学过angular的话),另一个是插值表达式{{}},这是位于元素内部的innerText中的。ms-duplex是双向指令,它既能将vm中对应的属性显示在页面上,为了标识这是vm上的属性, 我们要求用@符号带头。这可能与.NET的一些模板引擎相冲突,但据我所知,这些在.NET 中都是可以配置的。{{}}是纯粹的文本指令,它与ms-text很像,但更方便,用于单向将数据拍到页面上。

当我们改动文本域的内容时,ms-duplex会通过一些事件将元素的value值取出来同步到vm上。vm再比较 下它的这个属性值与之前是否一样,不一样就再次同步到视图。这期间涉及到虚拟DOM 复杂处理,但虚拟DOM远远比真实DOM轻量,因此有了这缓存层,我们的性能就大大提高。并且更新是最小化刷新的,不会将ms-controller圈定的所有元素都替换掉(如backbone自带的模板引擎)。它只是将{{}}那个区域的文本节点的nodeValue改一下(因为input.value是一样的,这次刷新只改一个地方)。

我们也可以看到ms-duplex其实也做了光标处理。当然ms-duplex的威力远远不止这些,以后我们再分说。

总而言之,MVVM其实将我们的程序划分两部分,让专业的语言做它们的擅长的事。JS用于处理业务逻辑,但类啊,模块啊,太复杂,那只给你一个类似普通对象的vm你们操作就好了。在视图部分,如何显示,如何变动,如何交互,就交给HTML,我们只要给它添加一些指令与绑定属性,它就像活着一样,替我们干活了。

总结一下本节课的内容。

  1. MVVM将程序分为两大块,我们需要用avalon.define创建vm,用指令预先指定会变动的部分
  2. ms-controller是圈定vm的作用域。ms-controller其实是可以套嵌的。
  3. ms-duplex是双向指令,通过一些事件监听我们的输入操作,从而同步vm。
  4. {{}}是用于输出数据。

大家可以到这里下载avalon.js,最好为本项目打一下星,支持国内开源项目,然后下回来自己照例子敲一遍。

avalon2学习教程01的更多相关文章

  1. avalon2学习教程06样式操作

    avalon2的ms-css的变革思路与ms-attr一样,将多个操作合并成到一个对象里面处理,因此没有ms-css-name="value",只有ms-css="Obj ...

  2. avalon2学习教程15指令总结

    avalon的指令在上一节已经全部介绍完毕,当然有的语焉不详,如ms-js.本节主要总结我对这方面的思考与探索. MVVM的成功很大一语分是来自于其指令,或叫绑定.让操作视图的功能交由形形式式的指令来 ...

  3. avalon2学习教程14动画使用

    avalon2实际上没有实现完整的动画模块,它只是对现有的CSS3动画或jquery animate再包装一层. 我们先说如何用CSS3为avalon实现动画效果.首先要使用avalon.effect ...

  4. avalon2学习教程13组件使用

    avalon2最引以为豪的东西是,终于有一套强大的类Web Component的组件系统.这个组件系统媲美于React的JSX,并且能更好地控制子组件的传参. avalon自诞生以来,就一直探索如何优 ...

  5. avalon2学习教程12数据验证

    avalon2砍掉了不少功能(如ms-include,ms-data),腾出空间加了其他更有用的功能.数据验证就是其中之一.现在avalon2内置的验证指令是参考之前的oniui验证框架与jquery ...

  6. avalon2学习教程09循环操作

    avalon2的循环指令的用法完全改变了.avalon最早期从knockout那样抄来ms-each,ms-with,分别用于数组循环与对象循环.它们都是针对元素内容进行循环.后来又从angular那 ...

  7. avalon2学习教程08插入移除操作

    本节介绍的ms-if指令与ms-visible很相似,都是让某元素"看不见",不同的是ms-visible是通过CSS实现,ms-if是通过移除插入节点实现. ms-if的用法与1 ...

  8. avalon2学习教程05属性操作

    avalon2与avalon1的属性操作虽然都是使用ms-attr,但用法完全不一样. avalon1是这样操作属性的 其语法为 ms-attr-valueName="vmProp" ...

  9. avalon2学习教程 03数据填充

    数据填充是一个模版最基础的功能,直接从JSON(vm)取出数据,放到适当的位置上.在静态模板中,不区分文本与HTML,只看你的字符串是否有< >来决定生成文本节点与元素节点.但MVVM中, ...

随机推荐

  1. 0000 - Spring MVC 原理以及helloworld

    1.概述 Spring MVC是目前最好的实现MVC设计模式的框架,是Spring框架的一个分支产品.以Spring IOC容器为基础,并利用容易的特性来简化它的配置.Spring MVC相当于Spr ...

  2. contentupe 表的用法

    model 代码 from django.db import modelsfrom django.contrib.contenttypes.models import ContentType #dja ...

  3. css居中问题:水平居中、垂直居中

    亲们支持我的新博客哦==>原文地址 ) 本篇文章所有演示代码下载==>github/calamus0427 css水平垂直居中是面试时候遇到最多的问题,我总结一下大部分解决方案 水平居中: ...

  4. 微信小程序中使用iconfont/font-awesome等自定义字体图标

    小程序不能识别外部字体文件,但是转换成Base64就可以使用字体图标了. 以阿里巴巴的iconfont为例 1.下载图标 先去官网下载喜欢的图标==> 下载解压后的文件夹==> 2.在线转 ...

  5. vue项目安装sass/scss

    vue 添加scss 安装好之后使用: 注意scss和sass的语法区别,scss是用传统花括号,sass是缩进控制,看个人习惯选择语言 sass语法看这里==>sass基本语法 vue项目编译 ...

  6. angularjs探秘<四> 双向数据绑定

    双向数据绑定是angularjs的一大特性,这个特性在实际开发中省了不少事儿.之前第二篇提过数据绑定,这一篇从实际开发的案例中具体看下双向数据绑定的便捷. 首先看一个场景: 在 注册/登录 中经常遇到 ...

  7. springboot工程的添加方式

    1.将spring boot做为父工程 <parent> <groupId>org.springframework.boot</groupId> <artif ...

  8. 使用git时报错出现vim.exe.stackdump

    使用git时报错出现vim.exe.stackdump 关闭命令行重新打开试试   一般由于异常报错引起的

  9. 重识linux-仅执行一次的工作调动at

    重识linux-仅执行一次的工作调动at 使用的是at命令 1 在系统中使用的是 atd这个服务 默认是不开启的 先启动 atd start 查看atd的状态 service atd status 2 ...

  10. 转载 Servlet3 的 @WebServlet http://www.cnblogs.com/luxh/archive/2012/06/06/2537458.html

    我使用的开发环境:MyEclipse10+Tomcat7+JDK6. 开发Servlet3的程序需要一定的环境支持.Servlet3是Java EE6规范的一部分,MyEclipse10和Tomcat ...