样式操作:ms-css-样式名=“样式值”,ms-class

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

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

ms-css-color="prop"

ms-css-background-color="prop"

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

注:样式值不能加入css hack和!important

事件绑定:

ms-事件名 ms-on-事件名

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ms-on</title>
<script src="avalon.js"></script>
<script>
avalon.ready(function(){
var vm = avalon.define({
$id: "test",
status: "event-type",
feild: "value-event-type",
firstname: "yang",
arr: ["aaa", "bbb", "ccc"],
callback: function(e) {
vm.status = e.type;
},
check: function(e) {
vm.feild = this.value + " " + e.type;
},
argsClick: function(e, a, b) {
alert([].slice.call(arguments).join(" "));
},
loopClick: function(a, e) {
alert(a+" "+e.type);
},
submit: function() {
var data = vm.$model;
alert(JSON.stringify(data));
}
});
avalon.scan();
});
</script>
</head>
<body>
<fieldset ms-controller="test">
<legend>有关事件回调传参</legend>
<div ms-mouseenter="callback" ms-mouseleave="callback">
{{status}}<br />
<input ms-on-input="check">{{ feild }}
</div>
<div ms-click="argsClick($event, 100, firstname)">点我</div>
<div ms-each-el="arr">
<p ms-click="loopClick(el, $event)">{{el}}</p>
</div>
<button ms-click="submit">提交</button>
</fieldset>
</body>
</html>

多重事件绑定:遵循后绑定的事件先执行的规则。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>multi-event-2</title>
<script src="avalon.js"></script>
<script>
var vm = avalon.define({
$id: "xxx",
fn: function() {
console.log("111111");
},
fn1: function() {
console.log("222222");
},
fn2: function() {
console.log("333333");
}
}); </script>
</head>
<body>
<div ms-controller="xxx" style="width: 100px; height: 100px; background: red;" ms-on-mouseenter-3="fn" ms-on-mouseenter-2="fn2" ms-on-mouseenter-1="fn1"></div>
</body>
</html>

循环操作:数组遍历:ms-repeat-->{{el}},ms-each-->{{el}};对象遍历:ms-repeat-->{{$key}},{{$val}},ms-with-->

{{$key}},{{$val}}

注:对ms-repeat而言,ms-repeat-*-->{{*}},如外层ms-repeat-elem,内层可通过{{elem}}访问当前元素

两者区别:ms-repeat绑定在子元素上,ms-each绑定在父元素上,ms-with绑定在父元素上

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ms-repeat-each</title>
<script src="avalon.js"></script>
<script>
var vm = avalon.define({
$id: "test",
arr: ["葡萄","苹果","香蕉","西瓜"]
}); </script>
</head>
<body>
<div ms-controller="test">
<ul>
<li ms-repeat="arr">{{el}}</li>
</ul>
<ul ms-each="arr">
<li>{{el}}</li>
</ul>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ms-repeat-each</title>
<script src="avalon.js"></script>
<script>
var vm = avalon.define({
$id: "test",
arr: ["葡萄","苹果","香蕉","西瓜"],
obj: {
aaa: "1111",
bbb: "2222",
ccc: "3333",
ddd: "4444"
}
}); </script>
</head>
<body>
<div ms-controller="test">
<ul>
<li ms-repeat="obj">{{$key}}--{{$val}}</li>
</ul>
<ul ms-with="obj">
<li>{{$key}}--{{$val}}</li>
</ul>
</div>
</body>
</html>

  循环显示数组元素的临时变量:

  el:任何类型,引用着当前循环的元素

  $index:Number,当前循环元素对应的索引值

  $first:Boolean,当前循环元素是否为数组的第一个元素

  $last:Boolean,当前循环元素是否为数组的最后一个元素

  $remove:Function,用于从数组中删除当前循环

  $outer: Object,用于内层循环访问外层循环的变量,内层访问外层{{$outer.$index}}

  循环显示对象的临时变量:

  $key:String,当前循环中的键名

  $val:任何类型,当前循环中的键值

  $outer:Object,用于内层循环访问外层循环的变量

  数据的更新:

  对象的更新:obj.key = newVal

  数组的更新:简单值更新:arr.set(index, newVal)

        对象值更新:arr[i].key = newVal

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>update-model</title>
<script src="avalon.js"></script>
<script>
var vm = avalon.define({
$id: "test",
data: {
aaa: 111,
bbb: 222,
ccc: 333,
ddd: 444
},
arr1: ['a','b','c'],
arr2: [{text: 'a'},{text: 'b'},{text: 'c'}]
});
setTimeout(function() {
vm.data.aaa = 555;
}, 2000);
setTimeout(function() {
vm.data = {
ddd: 111,
eee: 222
};
}, 3000);
setTimeout(function() {
vm.arr1.set(0,"changed");
}, 4000);
setTimeout(function() {
vm.arr2[0].text = "changed";
}, 5000);
</script>
</head>
<body ms-controller="test">
<h1>数据的更新:</h1>
<ul>
<li ms-repeat="data">{{$key}}--{{$val}}</li>
</ul>
<ul>
<li ms-repeat="arr1">{{el}}</li>
</ul>
<ul>
<li ms-repeat="arr2">{{el.text}}</li>
</ul>
</body>
</html>

 回调绑定属性:

 data-repeat-rendered 当前操作名(add,del,move,append,clear),用ms-repeate绑定,当监控数组发生添加、删除、重排等操作时触发

 data-with-sorted 原对象的所有键名构成数组,用ms-repeat,ms-with绑定,赶在对象渲染之前触发,要求输出一个字符串数组,对象的键值对会根据它一次输出

 data-with-rendered 当前操作名(append),用ms-with绑定,当前目标对象输出页面后触发

 data-each-rendered 当前操作名(add,del,move),用ms-each绑定,当监控数组发生添加、删除、重排等操作时触发

 数组长度与循环分支判断:

 获取数组长度:使用size方法,不使用length属性

 循环分支判断:使用ms-if-loop判定属性,不能使用ms-if,因为ms-if先于ms-repeat执行的

 监控数组方法:

 push,pushAll,shift,unshift,pop,clice,remove,removeAt,removeAll,clear,ensure,sort,reverse,set

 用法:vm.array.push或vm.array[push]

 avalon模板类型:

 嵌入到页面的模板:ms-include="expr"

 独立成子页面的模板:ms-include-src="expr"

avalon复杂绑定的更多相关文章

  1. avalon 双向绑定在新版chrome中不能同步中文输入

    1>1.x和2.x都有这样的问题,输入中文无法同步到VM,演示地址 http://codepen.io/roscoe054/pen/XXKYMj?editors=1111 chrome 版本 5 ...

  2. avalon 双工绑定以及一个按钮多个事件

    <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">    ...

  3. 前端MVVM框架avalon揭秘 - HTML编译器

    MVVM试图更加清晰的讲用户界面(UI)开发从应用程序的业务逻辑与行为中心分离,因为,很多这样的模式的实现都需要利用声明式数据绑定来实现讲View(视图)工作从其他层分离 所以出现了一大堆自定义的声明 ...

  4. 迷你MVVM框架 avalonjs 学习教程3、绑定属性与扫描机制

    在MVVM框架中,你都会看到页面定了许多奇怪的属性,比如knockout的data-☆,angular的ng-☆,avalon的ms-☆,此外还有一些只写文本节点上的双花括号,它们统称为指令.ms-☆ ...

  5. 迷你MVVM框架 avalonjs 学习教程1、引入avalon

    avalon是国内最强大的MVVM框架,没有之一,虽然淘宝KISSY团队也搞了两个MVVM框架,但都无疾而终.其他的MVVM框架都没几个.也只有外国人与像我这样闲的架构师才有时间钻研这东西.我很早之前 ...

  6. avalon 的HTML规范

    由于avalon以绑定属性实现对DOM的选择与操作,页面的美观与调试就变得至关重要.参照boostrap的HTML规范,制定如下 属性排列的规范 class (class, id, name与浏览器的 ...

  7. 迷你MVVM框架 avalonjs 入门教程

    新官网 请不要无视这里,这里都是链接,可以点的 OniUI组件库 学习教程 视频教程: 地址1 地址2 关于AvalonJs 开始的例子 扫描 视图模型 数据模型 绑定 作用域绑定(ms-contro ...

  8. 迷你MVVM框架 avalonjs1.5 入门教程

    avalon经过几年以后,已成为国内一个举足轻重的框架.它提供了多种不同的版本,满足不同人群的需要.比如avalon.js支持IE6等老旧浏览器,让许多靠政府项目或对兼容性要求够高的公司也能享受MVV ...

  9. JavaScript富应用MVC MVVM框架

    对框架的挑选 Ember.js.Backbone.js.Knockout.js.Spine.js.Batman.js , Angular.js 1. 轻量级的应用选择哪一个会比较好?2. 那一个比较简 ...

随机推荐

  1. UE4入门与精通

    由于目前在使用UE4引擎,多少也有一些心得,比如在日常使用中会遇到一些问题.坑(潜规则)或者一些使用技巧等.本人决定开一个大坑,主要有两个目的:一是可以自己做个记录,二是可以给大家提供一些参考吧.主要 ...

  2. (转)CMOS Sensor的调试经验分享

    CMOS Sensor的调试经验分享 我这里要介绍的就是CMOS摄像头的一些调试经验. 首先,要认识CMOS摄像头的结构.我们通常拿到的是集成封装好的模组,一般由三个部分组成:镜头.感应器和图像信号处 ...

  3. Ubuntu16.04安装vim插件YouCompleteMe

    原文 1 下载 git clone --recursive git://github.com/Valloric/YouCompleteMe 如果执行该命令没报错, 就ok了. 但是中途有可能会断掉, ...

  4. HTML之Hello World

    之前学过一段时间的HTML相关知识,但是已经有将近一年多时间没有用过了,曾经学过的知识基本都忘记了,所以要从头开始学习. 例子:Hello World <!DOCTYPE html> &l ...

  5. WCF简单使用(分别部署在控制台和IIS上)

    WCF部署到控制台 1.下面通过一个简单的服务示例来认识WCF1.新建项目,名称IBLL,解决方案名称WcfDemo,模板选择类库2.修改Class1.cs文件名称为 IUserInfoService ...

  6. EF并非我们想象的那么智能

    我之前在项目中用EF读取一个视图的数据,页面展示出现重复数据,当时百思不得其解,跟踪代码,数据读取时取到的数据并不是重复,为什么在前台显示就有重复了呢,我当时就在业务层将数据去重,但取到的数据跟数据库 ...

  7. python 学习

    python 使用 缩进 代替 C 中的 {}  或 delphi 中的 begin...end 1.help()  显示帮助或 help(<命令>) 2.字符串前加 r 表示原始字符串, ...

  8. Java面试宝典系列之基础排序算法

    本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...

  9. iOS开发零碎知识点

    记录一些常用和不常用的iOS知识点,防止遗忘丢失.(来源为收集自己项目中用到的或者整理看到博客中的知识点),如有错误,欢迎大家批评指正:如有好的知识点,也欢迎大家联系我,添加上去.谢谢! 一.调用代码 ...

  10. Logstash学习-plugin安装

    Usage: bin/logstash-plugin [OPTIONS] SUBCOMMAND [ARG] ... Parameters: SUBCOMMAND subcommand [ARG] .. ...