ms-class是avalon用得最多的幾個綁定之一,也正因為如此其功能一直在擴充中。根據時期的不同,分為舊風格與新風格兩種。
舊風格是指正在ms-class后面跟着類外,然后在綁定值中添加表達式,即ms-class-xxx="prop"。其中xxx為一個類名。在jQuery ui中,一些類名非常長,以-連接起來,如ui-widget-content,我們直接把它加在后面好了。比如下例:
<div ms-class-ui-datepicker-week-end="weekend" ms-class-ui-state-disabled="disabled" ms-class-ui-datepicker-unselectable="selected">{{date}}</div>
舊風格使用簡單,易上手,只要記得在ms-class-后加類名,=號加表達式,來控制它的添加移除就行了。但缺點也明顯:
- 每個ms-class只能控制一個類名,如果有N個類名其實都是由同一個綁定屬性控制的,也不得分開寫。
- ms-class后面只能接受全部是小寫的類名,因為在HTML 規范中,屬性名都只能是小寫,你就算大寫了,它也會轉換為小寫 。
- 有些類名,我們想動態生成出來。
針對它們,新風格搞出來,它要求ms-class后面什么也不寫,或只跟着整數,然后在屬性值的左邊寫類名,中間寫一個冒號,右邊寫表達式。
比如第一個多類名控制的需求,可以這樣做:ms-class="aaa bbb ccc:prop"
第2需求,可以這樣做:ms-class="AAA className : 1+ 2"。
第3需求,可以這樣做:ms-class="aaa width{{w}} height{{h}}: ddd", 當w=200, h=300, ddd為true時,它會為綁定的元素節點添加三個類名,aaa,width200,height300。
如果要用到多個ms-class呢,新風格可以這樣做
<div ms-class="aaa bbb" ms-class="ui-state-disabled:disabled" ms-class-="ui-state-disabled:disabled" ms-class-1="ui-datepicker-ok:test">{{date}}</div>
此外,在新風格中,如果類名是通過插值表達式實現,比如上面的ms-class="aaa width{{w}} height{{h}}: ddd",當w=200時,它會為元素添加width200,然后過段時間,w變成300時,它會去掉之前的width200,再添加width300,非常人性化。詳見這里