背景:

刚刚到一家新的公司,我新接手的项目采用的mvvm框架是avalon,当然我以前没有学过angular,但是用过react,所以对于这类框架应该不算陌生。但毕竟是一个新的框架,所以还是先学起来,俗话说得好,技多不压身嘛。据说avalon兼容性非常好,支持IE6+,无依赖,体积小,小伙伴们是不是对它更加有兴趣了呢?

目录:

  1. 关于AvalonJs
  2. 开始的例子
  3. 扫描
  4. 视图模型
  5. 数据模型
  6. 绑定
  7. 作用域绑定(ms-controller, ms-important)
  8. 忽略扫描绑定(ms-skip)
  9. 模板绑定(ms-include)
  10. 数据填充(ms-text, ms-html)
  11. 类名切换(ms-class, ms-hover, ms-active)
  12. 事件绑定(ms-on,……)
  13. 显示绑定(ms-visible)
  14. 插入绑定(ms-if)
  15. 双工绑定(ms-duplex)
  16. 样式绑定(ms-css)
  17. 数据绑定(ms-data)
  18. 属性绑定(ms-attr)
  19. 循环绑定(ms-repeat)
  20. 数组循环绑定(ms-each废弃)
  21. 对象循环绑定(ms-with废弃)
  22. UI绑定(ms-widget)
  23. 模块间通信及属性监控 $watch,$fire, $unwatch
  24. 过滤器
  25. AMD加载器
  26. 路由系统
  27. AJAX
  28. 功能扩展
  29. 在IE6下调试avalon
  30. 权限控制

这些内容看起来一点也没有react复杂,看到这里拿下它的信心增加了不少啊~下面开始边学习边记录咯。

笔记:

作用域绑定:ms-controller(下级未定义的属性会向上级作用域从查找),ms-important(未定义的属性不会向上级作用域查找),ms-skip(作用域里的所有指令都失效)

插值表达式:{{prop}},{{prop | html}}(转换成html节点再插入当前位置)

绑定属性:ms-text,ms-html,ms-value

ms-value数据能通过表单元素的value值显示出来,也支持插值表达式,但不能使用过滤器

过滤器:html,uppercase,lowercase,truncate(字符串截断),camelize,escape(转义),currency(对数字添加货币符号,以及千位符),number(格式化数字),date(格式化日期)

双向绑定:ms-duplex

当表单元素是radio时,要求属性是一个布尔值,当它的内容改动时,avalon会将此元素的checked值赋值给该属性;

需要对radio多选一的时候用ms-duplex-text属性进行双向绑定(文本值),如果是布尔值就用ms-duplex-boolean;

当表单元素是checkbox时,要求属性是一个数组,当我们改动它的内容时,avalon就会将此元素的value值push进该属性;

当表单元素是select时,要求属性是一个字符串或数组,当我们选中它的某一项时,avalon就会将此option元素的value值或text值push进该属性。

禁止双向绑定:ms-data-duplex-observe

显示隐藏处理:ms-visible(根据表达式或布尔值的真假显示隐藏)

这种方式是通过display属性来控制显示与隐藏的。

插入移除处理:ms-if(表达式的值为真,输出当前html元素,反之移除)

这种方式会从dom树中移除对应的节点,隐藏后原节点变为注释节点。

数据缓存:ms-data-*

对象、数组、日期类型的数据绑定后 不能显示获取,可通过this['data-array']这样的方式获取。

属性操作:ms-class,ms-duplex,ms-attr-*,ms-href,ms-src

类名操作:

ms-class="aaa:isOk"//当isOK为true时,添加类名aaa

ms-class="aaa" ms-class-1="bbb" ms-class-2="ccc"//类名为aaa bbb ccc

ms-class="aaa bbb ccc:isShow"//如果isShow为true,三个类名均添加,否则均不添加

ms-active、ms-hover分别用来模拟:active,:hover效果,用法与ms-class一样,ms-active只在点击那一瞬有效,ms-hover只有掠过时有效

avalon2.0里的ms-duplex-*功能

ms-duplex-string/ms-duplex:应用于表单元素,通过value属性同步vm

ms-duplex-number:应用于变单元素,如果value是数字格式就转换为数值,否则不做转换,然后再同步vm

ms-duplex-boolean:应用于所有变单元素,value为“true”时转换为true,其他值转为false,同步vm

ms-duplex-checked:只应用于radio,checkbox,通过checked属性同步vm

ms-data-duplex-observe:可以暂停数据的同步

data-duplex-changed:当监听的值发生变化时触发一个回调

data-duplex-focus:设置焦点,让光标位于value的最后

data-duplex-event:为元素绑定事件,支持blur,keyuo

avalon.duplexHooks钩子对象

实现数据验证、类型转换、格式化的功能,下面的例子完成了限制表单长度的功能:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>duplexHooks</title>
<script src="avalon.js"></script>
<script>
avalon.ready(function(){
var vm = avalon.define({
$id: "test",
aaa: "aaa"
});
avalon.scan();
});
avalon.duplexHooks.limit = {
get: function(str, data){
var limit = parseFloat(data.element.getAttribute("data-duplex-limit"));
if(str.length > limit) {
return data.element.value = str.slice(0, limit);
}
return str;
}
}
</script>
</head>
<body>
<div ms-controller="test">
<input type="text" ms-duplex-limit="aaa" data-duplex-limit="8">{{aaa}}
</div>
</body>
</html>

avalon学习笔记的更多相关文章

  1. avalon学习笔记一 列表及条件过滤

    好长时间都没有更新博客了,不是因为没有学习新的东西,而是到了新的单位每天玩命加班实在是太累了!经过一年的努力吧,终于可以轻松一下了.废话少说,直接干货吧! 由于是学习阶段,就直接拿了公司的二级页面做了 ...

  2. Vue学习笔记-1

    前言 本文不是Vue.js的教程,只是一边看官网Vue的教程文档一边记录并总结学习过程中遇到的一些问题和思考的笔记. 1.vue和avalon一样,都不支持VM初始时不存在的属性 而在Angular里 ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  5. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  6. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  7. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  8. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  9. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

随机推荐

  1. ASP.NET MVC EF 中使用异步控制器

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   为什么使用异步操作/线程池 ASP.NET MVC ...

  2. 初识Redis(1)

    Redis 是一款依据BSD开源协议发行的高性能Key-Value存储系统(cache and store). 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希( ...

  3. 添加系统右键菜单项 管理员取得所有权(W)(带盾牌)

    @color 0A @title 添加系统右键菜单项 管理员取得所有权(^&W)(带盾牌) by wjshan0808 @echo off echo * >nul reg add HKC ...

  4. OpenCV整体的模块架构

    之前啃了不少OpenCV的官方文档,发现如果了解了一些OpenCV整体的模块架构后,再重点学习自己感兴趣的部分的话,就会有一览众山小的感觉,于是,就决定写出这篇文章,作为启程OpenCV系列博文的第二 ...

  5. sql 默认id为1000

    创建索引: alter table resource AUTO_INCREMENT=1000;  //id默认自增为1000:

  6. Javascript模块化编程(三):require.js的用法(转)

    这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js. 一.为什么要用require.js? 最早的 ...

  7. 诚信的cpm广告联盟该怎么选择

    诚信的cpm广告联盟该怎么选择?58传媒广告联盟介绍说,在目前我国的互联网行业发展中,新站长在不断的崛起,这也就意味着老站长在不断的衰败,而老站长的衰败并不是一天两天造成的,而是其长期积累形成的,将错 ...

  8. dd-wrt 定时重连 pppoe 更换ip地址

    因为做代理,IP时常被封的原因,所以,需要每天定时重启路由器,重启路由器影响太大,所以重新拨号是一个更好的选择. 在dd-wrt里面,杀掉pppoe服务进程就可以了,这个进程会自动重新启动,然后就相当 ...

  9. php中环境变量

    $_ENV $_ENV是一个包含服务器端环境变量的数组.它是PHP中一个超级全局变量,我们可以在PHP 程序的任何地方直接访问它.   $_ENV只是被动的接受服务器端的环境变量并把它们转换为数组元素 ...

  10. EF连接ORACLE

    1.nuget引用Oracle.ManagedDataAccess.EntityFramework的dll文件 2.安装Oracle Developer Tools for Visual Studio ...