<div>
{{each list as user}}
{{if user.isVIP}}
<span>VIP</span>
{{else}}
<span>Join VIP</span>
{{/if}}
{{if !user.address}}
<div>Input address</div>
{{/if}}
<div>{{=user.name}}</div>
<input value="{{:user.age}}"/>
{{/each}}
</div>
<mx-dropdown *list="{{#dropdownList}}"/>
<div mx-html="{{=richHTML}}"></div>
<div mx-safe-html="{{=safeHTML}}"></div>
输出
{{= expr }}
安全转义输出
如当 expr 为 long text <a> content </a> 字符串时,实际渲染为
long text <a> content </a<
在浏览器环境中渲染转义的内容后,最终显示的结果是 long text <a> content </a>
如果需要输出带 HTML 的内容,请参考 mx-html
布尔或有值属性
当标签属性需要根据布尔或有值输出渲染时使用
<input disabled="{{=readonly}}?"/>
<div data-ext="{{=extend}}??"></div>
当 readonly 为 true 时 添加 disabled 属性,否则删除 disabled
当 extend 不为 null 和 undefined 是添加 data-ext 属性,否则删除
当 ? 或 ?? 后有内容时,将根据 ? 或?? 前面的表达式来决定是否添加属性,如果添加属性,属性的值为 ? 或?? 后面的内容
<input data-readonly="{{=readonly}}?ext{{=def}}"/>
<div data-ext="{{=extend}}??ext value"></div>
以上述 input 为例,当 readonly 为 false 时,表示删除 data-readonly 属性。当readonly 为 true 时,表示添加 data-readonly 且 属性的内容(值)为 ext{{=def}}
data-ext 同理,处理逻辑取决于 extend 的值不为 null 和 undefined,输出data-ext属性,值为 ext value
mx-html 和 mx-safe-html
输出 html 内容
<div mx-html="{{=html}}"></div>
使用 mx-html 时,表示这个html 是一个危险的 HTML 字符串,会调用配置中的 _mxSanitize 方法进行安全过滤,影响一定的性能
使用 mx-safe-html 时,表示这个html 是一个安全的 HTML 字符串,将直接渲染,性能更好。
如当 html 是 这是<b>加粗</b>文本 的内容时,将会把 加粗 二字粗体显示
<div mx-html="{{=html}}??"><b>inner</b><i>content</i></div>
当 html 有 ?? 修饰时,如果 html 是 null 或 undefined 时,将输出 div下子节点的内容,否则则是 html的内容
mx-html 不支持 ? 修饰符,如果使用编译器会直接报错
控制
if
可条件控制节点或某个属性内部的输出
{{if cond}}
<div class="card hover-shadow{{if pointerDown}} pointer-down{{/if}}"></div>
{{/if}}
each
循环输出列表
<div>
{{each list as user $index $addr by desc}}
{{$addr = user.province + user.city}}
<div>{{=$index}} . {{=user.name}}-{{=$addr}}</div>
{{/each}}
</div>
内置变量
$index 循环下标
$first 是否为第一个
$last 是否为最后一个
$total 总数
保留变量
$value
$key
$count
其它 $ 开头的变量则是自定义变量
支持解构和变量的赋值
<div>
{{each list as {province,city,name,badges} userIndex = $index by desc}}
<div>{{=userIndex}} . {{=name}}-{{=province+city}}</div>
{{each badges as b $index}}
<span>{{=userIndex}}.{{=$index}} => {{=b.name}}</span>
{{/each}}
{{/each}}
</div>
通过 by asc 和 by desc 控制循环方向,默认 by asc
forin
循环输出对象
<div>
{{forin object as $key $value}}
<div>{{=$key}} . {{=$value}}</div>
{{/forin}}
</div>
for
通用for循环,以支持更加复杂的情况
<div>
{{for(let a of list)}}
<span>{{=a.age}}</span>
{{/for}}
</div>
相比于 each 和 forin,for 更贴近于原生 js 语法,更灵活。
但是在其它特性的支持上,比如 双向绑定 就无法支持,因此 for 为备选方案,优先使用 each 和 forin
组件
内置标签
<mx-vframe> 用于渲染任意的 magix view
<mx-link> 用于渲染 a 标签
<mx-tag> 在渲染不同标签的节点
组件库
通过配置编译工具的 galleries 配置项后,可把项目当中的任意一个目录作为组件库,直接使用如
<mx-button>的语法来使用组件,来减少<mx-vframe>标签使用时,相对路径的输入
编译组件
可以通过编译工具的 galleries 配置项中的 xMap 配置编译组件
比如我们项目中有一段经常反复使用的 html 片断,比如卡片,我们可以抽象成编译组件,如 <x-card> 来减少对应 html 在开发中的使用
输出
{{= expr }}
如当
expr为long text <a> content </a>字符串时,实际渲染为long text <a> content </a<在浏览器环境中渲染转义的内容后,最终显示的结果是
long text <a> content </a>如果需要输出带
HTML的内容,请参考mx-html布尔或有值属性
当
readonly为true时 添加disabled属性,否则删除disabled当
extend不为null和undefined是添加data-ext属性,否则删除当
?或??后有内容时,将根据?或??前面的表达式来决定是否添加属性,如果添加属性,属性的值为?或??后面的内容以上述
input为例,当readonly为 false 时,表示删除data-readonly属性。当readonly为 true 时,表示添加data-readonly且 属性的内容(值)为ext{{=def}}data-ext同理,处理逻辑取决于extend的值不为null和undefined,输出data-ext属性,值为ext valuemx-html 和 mx-safe-html
使用
mx-html时,表示这个html是一个危险的HTML字符串,会调用配置中的_mxSanitize方法进行安全过滤,影响一定的性能使用
mx-safe-html时,表示这个html是一个安全的HTML字符串,将直接渲染,性能更好。如当
html是这是<b>加粗</b>文本的内容时,将会把加粗二字粗体显示当
html有??修饰时,如果html是null或undefined时,将输出div下子节点的内容,否则则是html的内容mx-html不支持?修饰符,如果使用编译器会直接报错控制
if
{{if cond}} <div class="card hover-shadow{{if pointerDown}} pointer-down{{/if}}"></div> {{/if}}each
内置变量
$index循环下标$first是否为第一个$last是否为最后一个$total总数保留变量
$value$key$count其它
$开头的变量则是自定义变量支持解构和变量的赋值
通过
by asc和by desc控制循环方向,默认by ascforin
for
相比于
each和forin,for更贴近于原生js语法,更灵活。但是在其它特性的支持上,比如
双向绑定就无法支持,因此for为备选方案,优先使用each和forin组件
内置标签
<mx-vframe>用于渲染任意的magix view<mx-link>用于渲染a标签<mx-tag>在渲染不同标签的节点组件库
通过配置编译工具的
galleries配置项后,可把项目当中的任意一个目录作为组件库,直接使用如<mx-button>的语法来使用组件,来减少<mx-vframe>标签使用时,相对路径的输入编译组件
可以通过编译工具的
galleries配置项中的xMap配置编译组件比如我们项目中有一段经常反复使用的
html片断,比如卡片,我们可以抽象成编译组件,如<x-card>来减少对应html在开发中的使用