头图

SAP 官方文档

hdImg_c5ecc39a1024e16866ce3c9ff7d3ba001577256016147.jpg

这个指令可以在 XML 模版的作用域之内,定义一个变量。这个变量只能在模版内部有效。

在官方文档给出的例子里:

<template:with path="meta>com.sap.vocabularies.UI.v1.Badge" var="badge">
    <!-- ... -->
</template:with>

meta 指向 oMetaModel, 即 /dataServices/schema/0/entityType/0

而 badge 根据 path 的解析,则指向 /dataServices/schema/0/entityType/0/com.sap.vocabularies.UI.v1.Badge.

可以从 with 指令 annotation help, 它接收一个 sap.ui.model.Context 对象,该对象从指令的 path 属性中标识模型和路径,并可能返回以下内容之一:

  • 分配给变量的 sap.ui.model.Context 对象
  • 一个非空字符串,用作同一模型中的路径并分配给变量
  • 未定义,在这种情况下,助手被忽略,原始路径被分配给变量
  • 如果视图是异步加载的,则返回一个 Promise 对象,该对象 resolve 之后的值,可以是以上三种任意一种可能。

Annotation helper 可以分析路径指向的对象,并从中导出 resolved path. 这个 path 可以通过执行 normalizor 函数或者 following reference 来得到。

带有 with 指令的模版解析步骤:

<template:with path="meta>Value" helper="sap.ui.model.odata.AnnotationHelper.resolvePath" var="target">
  <template:if test="{= {target>sap:semantics} === 'email'}" >
    <core:Icon src="sap-icon://email" />
  </template:if>
  <template:if test="{= {target>sap:semantics} === 'tel'}" >
    <core:Icon src="sap-icon://phone" />
  </template:if>
</template:with>

上面的代码,meta 是一个 OData 元模型,meta>Value 的值被传递给 Annotation helper 的 resolvePath 方法,同样传递进去的还有一个 context 对象,resolvePath 解析出一个新的 path,赋给变量 target.

AnnotationHelper 连接与 XML 模板相关的所有部分:它了解 OData 元模型及其结构以及 OData v4 注释。 AnnotationHelper 提供格式化函数和辅助函数。

可以直接从 JavaScript 代码调用这些方法,无需 XML 运行时模板。 使用前不需要 sap.ui.model.odata.AnnotationHelper。

格式化程序函数可用于绑定表达式和测试条件的 <template:if> 指令。

要使用格式化程序函数,需要通过将配置选项 xx-bindingSyntax 设置为complex 来启用扩展绑定语法。如果未启用扩展绑定语法并且通过注释助手的格式函数创建表达式,则控制台中会发出以下警告:复杂绑定语法未激活。


注销
1k 声望1.6k 粉丝

invalid