zoukankan      html  css  js  c++  java
  • 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="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>
  • 相关阅读:
    函数
    文件
    字符编码
    卸载python
    mysql修改密码
    playbook
    expect无交互操作
    用户认证
    配置并访问NFS共享
    配置Multipath多路径环境
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/4197741.html
Copyright © 2011-2022 走看看