mip-action-macro MIP 交互行为拓展

优质
小牛编辑
132浏览
2023-12-01

为 MIP on 表达式拓展 1)行为封装 2)方法执行前置判断 3)有限运算能力 等功能。

标题内容
类型
支持布局nodisplay
所需脚本https://c.mipcdn.com/static/v2/mip-action-macro/mip-action-macro.js

示例

mip-action-macro 能够将 MIP on 表达式当中的行为部分封装起来,供多个事件监听调用。

基本使用

它的基本使用方法如下所示:

<mip-action-macro
 
  on="execute:MIP.navigateTo(url='https://www.baidu.com', target='_blank')"
></mip-action-macro>

<button on="tap:simple-macro-id.execute">点击跳转百度首页</button>
查看例子 编辑示例

可以看到,<mip-action-macro> 对外暴露了 execute 方法,因此可以在 on 表达式里面通过 id.execute() 来执行通过 <mip-action-macro> 封装起来的其他行为。execute 方法会触发 <mip-action-macro>execute 事件,因此可以通过定义 <mip-action-macro> 的 on 表达式来进行行为的封装。在上面的例子当中,我们将 MIP.navigateTo() 方法封装了起来,因此我们只需要执行 simple-macro-id.execute 就可以触发页面跳转。

参数传递

<mip-action-macro>execute 方法可以传入参数,其参数的格式与 MIP.navigateToMIP.scrollTo 等方法的格式保持一致。传参的方法及参数的使用如下所示:

<mip-action-macro
 
  on="execute:MIP.navigateTo(url=event.url, target='_blank')"
></mip-action-macro>

<button on="tap:simple-macro-id.execute(url='https://www.baidu.com')">点击跳转百度首页</button>
<button on="tap:simple-macro-id.execute(url='https://www.mipengine.org')">点击跳转 MIP 官网首页</button>
查看例子 编辑示例

可以看到,我们在调用 simple-macro-id.execute 方法的时候传入了 url='xxx' 的参数,这个参数的值可以在 <mip-action-macro> 的事件回调当中通过 event.url 获取。也就是说,<mip-action-macro> 可以传入一个对象作为参数,这个对象可以在事件回调里面通过 event 关键字获取。

注意: <mip-action-macro> 的参数只支持按值传递,不支持按引用传递。

前置判断

<mip-action-macro> 提供了 condition 属性来进行行为触发的前置判断。condition 可以传入一个符合 MIP 表达式规范 的表达式,在调用 execute 方法时,会首先计算该表达式,只有当运算结果为真(true, 1, '123' 等等 !!val === true 的结果)时,才会继续触发 execute 事件,反之则触发 mismatch 事件。

<mip-data scope>
  <script type="application/json">
  {
    "baidu": "https://www.baidu.com",
    "mipengine": "https://www.mipengine.org"
  }
  </script>
</mip-data>
<mip-action-macro
 
  on="execute:MIP.navigateTo(url=event.url, target='_blank')"
  condition="event.url === simpleData.mipengine"
></mip-action-macro>

<button on="tap:simple-macro-id.execute(url=simpleData.baidu)">点击跳转百度首页</button>
<button on="tap:simple-macro-id.execute(url=simpleData.mipengine)">点击跳转 MIP 官网首页</button>
查看例子 编辑示例

在这个例子当中,我们设置了条件 event.url === simpleData.mipengine,因此点击跳转百度首页时会不执行,只有当点击跳转 MIP 官网首页时才会执行。

有限运算能力

<mip-action-macro> 支持在 on 事件回调当中进行有限的运算,除了原先就支持的 MIP.setData 内部支持 MIP 表达式进行运算之外,目前还开放了 全局元素方法全部特殊对象方法 的运算能力。

MIP.navigateTo 为例,我们可以在 <mip-action-macro> 当中进行一些简单的运算:

<mip-data scope>
  <script type="application/json">
  {
    "protocol": "https://",
    "baidu": "www.baidu.com"
  }
  </script>
</mip-data>
<mip-action-macro
 
  on="execute:
    MIP.navigateTo(
      url=simpleData.protocol + event.url,
      target='_blank'
    )"
></mip-action-macro>

<button on="tap:simple-macro-id.execute(url=simpleData.baidu)">点击跳转百度首页</button>
查看例子 编辑示例

可以看到,MIP.navigateTourl 参数由 simpleData.protocol + event.url 字符串拼接而成,点击按钮仍然能正常跳转到百度首页,由此可见有限的计算能力得到了支持。事实上,只要计算表达式满足 MIP 表达式的要求,同时计算的结果满足方法的参数数据要求时,就可以正常工作了。

属性

id

说明:节点 ID
必选项:是
类型:字符串

condition

说明:触发事件的前置判断条件
必选项:否
类型:字符串
取值范围:符合 MIP 表达式的字符串

事件

execute

说明:调用该组件 execute 方法时默认触发的事件,当定义了 contition 条件时,则会在 condition 表达式执行结果为时触发。
数据:调用该组件 execute 方法时传入的对象。

mismatch

说明:当定义了 condition 属性,并且其执行 condition 表达式的结果为非真时触发。
数据:调用该组件 execute 方法时传入的对象。

方法

execute

说明:执行 <mip-action-macro> 所封装的方法,可传入一个对象作为参数,这个对象能够在 <mip-action-macro> 的事件回调和 condition 表达式中通过 event 对象获取。
注意:传入的参数仅支持按值传递,不支持按引用传递。传入的值会通过 JSON.stringify 和 JSON.parse 进行序列化和反序列化,得到的结果才能够通过 event 对象获取。