信息
CabinX使用一种基于普通网页开发流程,采用HTML + CSS + JavaScript的组合, 在CabinX研发体系中为了达到研发流程极简的效果,采用DML + JavaScript组合, 其中DML(Dmall Markup Language)充当HTML角色。 通过不懈努力我们制定了一套强大的UI规约,最终让开发者不写CSS便能完成页面开发。
文本插值
最基本的数据绑定形式是文本插值,它使用的是“Mustache”语法 (即双大括号):
<component>Message: {{ msg }}</>
警告
在网站上动态渲染任意 HTML 是非常危险的,因为这非常容易造成 XSS 漏洞。请仅在内容安全可信时再使用动态HTML,并且永远不要使用用户提供的 HTML 内容。
Attribute 绑定
双大括号也能在 attributes 中使用。
<component id="{{dynamicId}}">
</component>
<component id="vip-{{dynamicId}}">
</component>
布尔型 Attribute
<x-button disabled="{{true}}">Button</x-button>
<x-button disabled="{{false}}">Button</x-button>
使用 JavaScript 表达式
{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
{{ message.split('').reverse().join('') }}
<div id="`list-{{id}}`"></div>
调用函数
<component title="{{toTitleDate(date)}}">
{{ formatDate(date) }}
</component>
提示
绑定在表达式中的方法在组件每次更新时都会被重新调用,因此不应该产生任何副作用,比如改变数据或触发异步操作。
事件响应
在DML通过 bind + 事件名
<component bind-click="myClickHandle"></component>
内置指令
通过dm-开头,目前支持的有:
- dm-show
基于表达式值的真假性,来改变元素的可见性。为假时,页面不会展示,但是模块会构建。
- dm-if
基于表达式值的真假性,来条件性地渲染元素或者模板片段。如果初始条件是假,那么其内部的内容都不会被渲染。
- dm-else
表示 dm-if链式调用的“else块”。
- dm-for
基于原始数据多次渲染元素或模板块。