你是否曾经需要呈现一些文本或html,其中大部分是预定义的,只有少数几个点必须充满动态内容?如果是这样,您很可能了解模板引擎。你很可能听说过胡子。
胡子在网络开发领域非常流行。它是一种无逻辑的模板语法,允许创建一个文本模板,用其中的标记标记一些位置,然后用程序中的动态内容(值或值列表)替换这些标记。例如,这里有一个简单的问候语模板:
"Hello{{name}}!",其中{name}}是一个引用名为name的变量(结构组件)的标记,在处理过程中,它将被替换为实际值,并导致例如"Hello User X!"
Mustache很适合生成HTML块(或整个页面)或几乎任何其他可模板化的文本内容。原始规范可以在这里找到。mustache语法是用大量语言实现的。最近,我在ABAP中创建了一个mustache处理器的实现(称为ABAP mustache,毫不奇怪)。代码是开源的,免费的,希望能对其他人有用。这里是github项目页面。
一个简单的例子开始
让我们假设你想生成一个小的HTML块与销售优惠如下。动态部分是sales items和prices以及商店名称。
模板将相应地显示:
注意,{{items}}标签的开头有{symbol–这将开始一个以相应的{{/items}结尾的部分。节可用于:
条件输出(如果项不为空/假/零,则在输出中包含节的内部内容,否则跳过)迭代输出,如果项是表。我们的示例就是这样的:表的内容被迭代,每个记录的节被重复。一个节可能包含其他节-数据结构的深度目前不受限制。注意,在我们的示例中,名称和价格应该是项目的组件。但是,如果在当前上下文(表行)中找不到某些{tag}},则会在更高的上下文级别(例如,在本例中,在包含shop\u name的结构中)进行搜索。
那么如何在abap中呈现这个呢?假设您有以下数据结构…
…将其相应地填充到某个地方,并为您的数据呈现模板…
这就是它的工作原理。现在lv_文本包含呈现的html,您可以进一步使用它。
一些更复杂的细节
输入数据可能是一个结构或任何类型的表-它是自动检测的。对于表格,每行都要重复模板。数据的深度目前不受限制(因此节可以包含其他节等等)。此外,人工智能关键技术,还有一个特殊的表类型lcl\u mustache=>tyu struc\tt,它被处理为"通用"平面结构。名称组件对应于标记名(不区分大小写),值可以放在val字段(作为字符串)或作为对dref的引用。后者可以是对结构或表(带有节数据)的引用。下面是上面使用它的例子:
lcl\u mustache=>tyu struc\u tt主要用于根结构。据推测,将部分数据准备为规则结构和表格是很方便的。然而,在顶层将它们结合起来可能会很麻烦。这是lcl\ U mustache=>ty\ U struc\ tt可以使用的地方。尽管这只是一个选项。
模板可以是字符串或字符串表(`type string\u table`)
输出可以请求为字符串或字符串表(`type string\u table`)
关于新行字符处理的某些细节可以在项目的存储库自述文件和wiki中找到。
另一个很酷的例子胡子概念的特点是局部的。部分可被视为包含。因此,您可以准备您的模板部分在方便和合理的片段。如果需要的话,在模板范围内重用它们。
目前该类实现了所有标准的mutche特性。有一些计划是为了实现一些受handlebar(另一个类似于mutche的库)启发的特性,物联网城市,也有一些选择是为了使用类方法作为标记数据提供者。然而,这取决于abap mustache的我(或其他用户)将面临的实际用例。
更多详细信息、示例和API描述可以在abap mustache项目的wiki中找到。
安装的最佳选择是使用abapGit工具将存储库克隆到您的SAP系统(这是一个很好的共享代码的软件,当然是一件好事)尝试)。或者,它可以作为一个include复制到系统中(或者实际上是两个include,私人云服务器,发发淘客,如果您希望保留单元测试;)。详情见项目自述文件。
,大淘客网