avalon2与avalon1的属性操做虽然都是使用ms-attr,但用法彻底不同。javascript
avalon1是这样操做属性的html
其语法为java
ms-attr-valueName="vmProp"
有多少个属性就写多个ms-attr-。其中不能省略。此外,还存在ms-title, ms-alt,ms-src, ms-href, ms-selected, ms-checked等等缩略写法。但估计不多人知道,到底哪些属性能够缩写,哪些不能。数组
avalon2从减轻用户的记忆出发,将你要操做的属性所有打包成一个对象,并规定,只能属性值才能使用@开头的vm属性。此外,avalon不存在ms-title这样的缩略写法。性能
或者
attrObj为vm的一个对象属性,但这个不太经常使用。htm
或者对象
ms-attr直接对应一个数组。这个灵感是来自ReactNative的style指令,它们能够经过数组,传入多个样式对象…………blog
不过不管你怎么搞,最后你传的东西能保持avalon内部能将它变回一个对象就好了。ip
有时你的对象很长,须要换行,avalon2也是支持的,即使你写得像如下这么恶心,avalon2仍是能认出来。字符串
<!DOCTYPE html> <html> <head> <title>TODO supply a title</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width"> <script src="./dist/avalon.js"></script> <script > var vm = avalon.define({ $id: "test", title:111, src: "222", lang: 333 }) </script> </head> <body ms-controller="test" > <div aaa='ddd' bbb=333 ms-attr='{title: @title, ddd:@src, lang:@lang}' >{{ @src ? 333: 'empty' }}</div> <input ms-duplex="@src"/> </body> </html>
但为了性能起见,ms-attr最好仍是保持在一行吧。
avalon2的ms-attr能够支持过滤器,但没有提供现成的过滤器,虽然用户进行编写。不过须要注意的是,这个过滤器要处理的是{title:'111',ddd: '222', lang:222}这样的对象,而不是一个字符串。好比咱们要将须要个属性转换成日期格式,你能够在你的过滤器里调用avalon自带的date过滤器。