一、关于AvalonJS

avalon是国内的一个MVVM框架,是从knockout发展起来的

分为两个版本

avalon.js版本,支持IE6及非常老的标准浏览器。这里的标准浏览器特指W3C阵营中的safari, opera, firefox, chrome

avalon.modern.js版本,兼容IE10与标准浏览器

如果想做移动端开发,有一个mobile.js,可以直接将它的源码 拷贝到avalon.modern.js里最后一个花括号的前面

二、获得源码

项目地址:https://github.com/RubyLouvre/avalon

如何从github获取源码请查看:http://limodou.github.io/avalon-learning/zh_CN/installation.html

源码下载后的目录如图:

.min.js是压缩版

examples文件夹里面是例子,里面有index.html,可以跳转到各个实例页面,对于学习avalonJs事半功倍

三、又见 hello,world

<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <script src="js/avalon.js" ></script>
        <script>
            var model = avalon.define('test', function(vm) {
                vm.aaa = "world"
            })
        </script>
    </head>
    <body ms-controller="test">
        <p>hello,{{aaa}}</p>
    </body>
</html>

在浏览器打开这个文件,结果是   Hello,world

<body ms-controller="test">中的 ms-controller ,用来声明avalon的控制域。类似于angularjs中的 ng-controller。

一个HTML文件中可以定义多个 ms-controller

avalon使用 ms- 开头的属性。所以只要涉及到Avalon动态处理功能的,都要注意定义ms- 开头的属性。

目前,Avalon并不存在以 ms- 开头的 TAG,所以全部都是属性。

<p>hello,{{aaa}}</p>,也与angularjs的语法一样,使用{{}}进行插值,为动态变化的模板变量

一个控制域与一个Model相对应,当Model中的数据发生变化,与之对应的控制域的DOM会自 动进行变化。

var model = avalon.define('test', function(vm) {
                vm.aaa = "world"
            })

  • 第一个参数是和前面 ms-controller 对应的名字。这里是 test
  • 第二个是一个函数,这个函数需要一个参数,名字可以随便起,但是习惯上使用 vm (在 Avalon中表示是 ViewModel 的意思)。 vm 可以理解为Model的引用。

vm.aaa = "world",在VM上定义了一个aaa属性,和{{aaa}}对应

四、绑定

先看下avalonJs的所有绑定

1、上面已经说了作用域绑定:ms-controller(继承), ms-important(组合),作用域的绑定可以嵌套

2、模板绑定:ms-include

想在模板加载后,加工一下模板,可以使用 data-include-loaded来指定回调的名字

想在模板扫描后,隐藏loading什么的,可以使用 data-include-rendered来指定回调的名字

外部模板通过 ms-include-src="src"进行加载

<div ms-include-src="'tmpl.html'"></div>(需要后端服务器支持)

要用两种引号强制让它的内部不是一个变量

3、数据绑定: ms-text, ms-html,{{}}

<script>

avalon.define("test", function(vm) {

vm.text = "<b> 1111  </b>"

})

</script>

<div ms-controller="test">

<div><em>用于测试是否被测除</em>xxxx{{text}}yyyy</div>

<div><em>用于测试是否被测除</em>xxxx{{text|html}}yyyy</div>

<div ms-text="text"><em>用于测试是否被测除</em>xxxx yyyy</div>

<div ms-html="text"><em>用于测试是否被测除</em>xxxx yyyy</div>

</div>

结果:

4、类名切换与样式绑定: ms-class, ms-hover, ms-active,ms-css

ms-css的用法为ms-css-样式名="样式值"

如:

ms-css-width="prop"(会自动补px),

ms-css-height="{{prop}}%",

ms-css-color="prop",

ms-css-background-color="prop",

ms-css-font-size="{{prop}}px"。

ms-class="aaa", xxx为类名

ms-hover="类名",规则同ms-class, 当用户的鼠标悬浮在元素上方时,添加一个或多个类名,移走时移除它们。

ms-active="类名",规则同ms-class,当用户点击它时为它添加一个类名或多个类名,鼠标弹起时移除它们。

5、事件绑定: ms-on

  • ms-click
  • ms-dblclick
  • ms-mouseout
  • ms-mouseover
  • ms-mousemove
  • ms-mouseenter
  • ms-mouseleave
  • ms-mouseup
  • ms-mousedown
  • ms-keypress
  • ms-keyup
  • ms-keydown
  • ms-focus
  • ms-blur
  • ms-change
  • ms-scroll
  • ms-animation
  • ms-on-*

<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="UTF-8">
        <title>有关事件回调传参</title>
        <script src="js/avalon.js" type="text/javascript"></script>
        <script>
            var a = avalon.define("simple", function(vm) {
                vm.array = ["aaa", "bbb", "ccc"]
                vm.loopClick = function(a) {
                    alert(a)
                }
            });
        </script>
    </head>
    <body>
        <fieldset ms-controller="simple">
            <div ms-each-el="array" >
                <p ms-click="loopClick(el)">{{el}}</p>
            </div>
        </fieldset>
    </body>
</html>

6、显示绑定: ms-visible

<!DOCTYPE HTML>
<html>
    <head>
        <title>ms-visible</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <script src="../avalon.js" ></script>
        <script>
            var model = avalon.define("test", function(vm) {
                vm.a = true
            })
        </script>
        <style>
            .rect{
                display: none;
            }
        </style>
    </head>
    <body>
        <h3>ms-visible</h3>
        <div ms-controller="test">
            <p>点我隐藏或显示下面的方块<input ms-duplex="a"  type="radio"></p>
            <div class="rect" ms-visible="a" >visible</div>
        </div>
    </body>
</html>

AvalonJS学习笔记(一)的更多相关文章

  1. avalonjs学习笔记之实现一个简单的查询页

    官网地址:http://avalonjs.coding.me/ 因为是为了学习js,所以对样式没什么要求,先放效果图: 步骤为:初始页面-------条件查询-------编辑员工1-------保存 ...

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

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

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

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

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

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

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

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

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

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

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

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

  8. CSS学习笔记

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

  9. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

随机推荐

  1. Informatica _组件使用介绍及优化

    转载 http://blog.csdn.net/yongjian1092/article/details/52588434 有空自己会写一个关于这方面的文章.

  2. 51nod1245 Binomial Coefficients Revenge

    题目来源: HackerRank 基准时间限制:2 秒 空间限制:131072 KB 分值: 640  C(M,N) = M! / N! / (M - N)! (组合数).给出M和质数p,求C(M,0 ...

  3. 【转载】VS2013安装需要IE10

    因为需要移动办公,需要给笔记本搭建编程环境.安装VS2013时遇到了小麻烦,提示我,需要安装IE10. 然后我很听话的按照提供的超链接,到了官网,下载了最新的IE11,然后安装,结果告诉我下载的IE版 ...

  4. Spring Boot 中使用 MyBatis 整合 Druid 多数据源

    2017 年 10 月 20 日   Spring Boot 中使用 MyBatis 整合 Druid 多数据源 本文将讲述 spring boot + mybatis + druid 多数据源配置方 ...

  5. 海康解码器对接总结(java 版)

    本文只是对接海康解码器的动态解码功能,即配置解码器大屏上指定的某个窗口去解某一路IP视频源. 1. 首先,定义所需的结构体与接口.海康SDK中包含的结构体与接口非常之多,在官方的例子中,实现了大部分的 ...

  6. LCD 每隔10分钟 自动熄灭 --打开Framebuffer console的时候【转】

    转自:http://blog.csdn.net/liujia2100/article/details/9009063 版权声明:本文为博主原创文章,未经博主允许不得转载. 之前移植LCD的时候,一切正 ...

  7. HDU 6112 今夕何夕 蔡勒公式

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6112题意:中文题目 分析:关键点在与如何计算一个日期是星期几,这个可以通过蔡勒公式来计算.基姆拉尔森计 ...

  8. python的IDLE界面回退代码语句

    Alt+P回退到IDLE中之前输入的代码语句 Alt+N可以移至下一个代码语句

  9. docker安装(2016-08-25版本)

    . 通过命令对系统的版本进行查看 [root@localhost ~]# uname -a [root@localhost ~]# cat /etc/issue --> 如果是6.5之前的版本 ...

  10. [ Linux ] 服务器更换硬盘

    服务器型号:ThinkServer RD650操作系统:Red Hat 6.7业务用途:生产环境监控机 接到机房邮件通知,告知某台服务器硬盘告警,并提供了设备SN号和机柜位置.根据提供想相关信息找到对 ...