Avalon学习

1.认识Avalon
Avalon是一个简单易用的迷你的MVVM框架,作者是博客园的司徒正美,去哪儿、搜狐等等都用这个框架。
没有任何依赖,兼容性非常好,支持IE6,不到5000行,压缩后不到50KB。
官网地址:http://avalonjs.github.io/,移动版本是avalon.modern.js。
2.作用域绑定(ms-controller, ms-important)
3.忽略扫描绑定(ms-skip)
4.数据填充(ms-text, ms-html)
5.类名切换(ms-class, ms-hover, ms-active)
6.事件绑定(ms-on)
7.显示绑定(ms-visible)
8.双工绑定(ms-duplex)
9.样式绑定(ms-css)
10.数据绑定(ms-data)用法为ms-data-name="value", 用于为元素节点绑定HTML5 data-*属性。
11.属性绑定(ms-attr),1.3.5后,除了ms-src, ms-href,其他都吞入ms-attr-*
12.循环绑定(ms-repeat)
13.模块间通信及属性监控 $watch,$fire, $unwatch
14.过滤器

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <style>
        .red{ background-color: red;}
        .active {
            background-color: yellow;
        }
        .hover{ background-color: green;}
    </style>
    <script src="avalon.js"></script>
    <script>
        avalon.ready(function() {
            var vm = avalon.define({
                $id: "box", //ms-controller作用域ID
                w: 100, //变量
                h: 100,
                click: function() {
                    vm.w = parseFloat(vm.w) + 10;
                    vm.h = parseFloat(vm.h) + 10;
                },
                b: 100,
                $skipArray: ["b"], //不想监听b属性,可以直接将此属性名放到$skipArray数组中
                text: "<b>1111</b>",
                status: "",
                callback: function(e) {
                    vm.status = e.type;
                },
                field: "",
                check: function(e, par) {
                    vm.field = this.value + par;
                },
                isvisible: true,
                array: "a,b,c,d,e,f,g".split(","),
                checkboxArrayIds: [1, 3],
                aaa: "http://www.yxl.com/1",
                A: "ABCD"


        });
            vm.$watch("w", function(newValue,oldValue) {
                avalon.log(newValue);
                avalon.log(oldValue);
            });
            setTimeout(function() {
                vm.w = 222;

            }, 5000);

            avalon.filters.myfilter = function (str, args, args2) {//str为管道符之前计算得到的结果,默认框架会帮你传入,此方法必须返回一个值
                /* 具体逻辑 */
                str = str + 1;
                return str;
            }
            avalon.filters.add=function(num2) {
                return  num2+5;
            }
            avalon.define({
                $id: "ddd", //ms-important作用域如果viewmodel中没有定义变量不会向上一级查找
                w: 100 //变量
            });
            avalon.scan();
        });
        //下面的这种写法也可以
        //avalon.ready(function () {
        //    avalon.define("box", function(vm) {
        //        vm.w = 100;
        //        vm.h = 100;
        //    });
        //    avalon.scan();
        //});
    </script>
</head>
<body>
    <div ms-controller="box">
        <div style=" background: #a9ea00;" ms-css-width="w" ms-css-height="h" ms-click="click"></div>
        <p>{{ w }} x {{ h }}</p>
        <p ms-skip>{{ w }} x {{ h }}</p>
        <p>W: <input type="text" ms-duplex="w" data-duplex-event="change" /></p>
        <p>H: <input type="text" ms-duplex="h" /></p>
        <p>b: <input type="text" ms-duplex="b" /></p>{{b}}
        <div ms-important="ddd">
            <p>H: <input type="text" ms-duplex="h" /></p>
        </div>
        <div ms-controller="ddd">
            <p>H: <input type="text" ms-duplex="h" /></p>
        </div>
        <p ms-text="text"></p>
        <p ms-html="text"></p>
        <p ms-class="red" ms-hover="hover" ms-active="active" style="width:100px; height:100px;"></p>
        <p ms-mouseenter="callback" ms-mouseleave="callback">
            <input type="text" ms-on-input="check($event,'我是传过来的参数')" />{{status}}{{field}}
        </p>
        <p ms-visible="isvisible">显示绑定</p>
        <p>
            <ul ms-each-item="array">
                <li ms-click="$remove" ms-if="$index % 2 == 0">{{ item }} --- {{$index}}</li>
            </ul>
        </p>
        <p>
        <p>
            ms-duplex-number
            <input ms-duplex-number="checkboxArrayIds" type="checkbox" value="1" />
            <input ms-duplex-number="checkboxArrayIds" type="checkbox" value="2" />
            <input ms-duplex-number="checkboxArrayIds" type="checkbox" value="3" />
            <input ms-duplex-number="checkboxArrayIds" type="checkbox" value="4" />
            {{checkboxArrayIds}}

        </p>
        <p>
            <input type="text" ms-data-relateid="1">
        </p>
        <p>
            <a ms-href="aaa + '.html'">xxxx</a>
            <a ms-href="{{aaa}}.html">xxxx</a>
        </p>
        
        <p>
            <ul>
                <li ms-repeat-item="array">{{ item }} --- {{$index}}</li>
            </ul>
        </p>
        <p>{{A|lowercase}}</p>
        <p>{{ new Date | date("yyyy年MM月dd日 HH:mm:ss")}}</p>
        <p>{{ 1|add }}</p>
    </div>
</body>
</html>

 

posted @ 2015-01-01 19:57  学亮  阅读(892)  评论(0编辑  收藏  举报