带胡子的条件渲染
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带胡子的条件渲染相关的知识,希望对你有一定的参考价值。
我正在使用dmustache(https://github.com/synopse/dmustache)来渲染一些模板。我想知道如果字符串变量是一个空字符串,如何呈现某个部分。
这个简化的程序渲染FirstName: Joe MiddleName: LastName: Doe
,但我想有FirstName: Joe LastName: Doe
,因为没有MiddleName(仅在这种情况下)。
program P;
uses
System.SysUtils, SynMustache, SynCommons;
const
TEMPLATE = 'FirstName: {{FIRSTNAME}} {{#MIDDLENAME}}MiddleName: {{MIDDLENAME}}{{/MIDDLENAME}} LastName: {{LASTNAME}}';
var
Mustache: TSynMustache;
Content: Variant;
begin
Mustache := TSynMustache.Parse(TEMPLATE);
TDocVariant.New(Content);
Content.FirstName := 'Joe';
Content.MiddleName := '';
Content.LastName := 'Doe';
WriteLn(Mustache.Render(Content));
ReadLn;
end.
使用模板中的部分不会改变结果
TEMPLATE = 'FirstName: {{FIRSTNAME}} {{#MIDDLENAME}}MiddleName: {{MIDDLENAME}} {{/MIDDLENAME}}LastName: {{LASTNAME}}';
答案
我找到了两种方法来解决这个问题。首先是在模板中使用条件,就像
TEMPLATE = 'FirstName: {{FIRSTNAME}} {{#if MIDDLENAME <> ""}}MiddleName: {{MIDDLENAME}} {{/if}}LastName: {{LASTNAME}}';
为了使其工作,还必须通过标准助手来调用Render,就像
Mustache.Render(Content, nil, TSynMustache.HelpersGetStandardList)
第二个是将内容变量设置为NULL而不是空字符串(或根本不设置)并使用一个部分(注意部分内部的{{.}}
自引用)
const
TEMPLATE = 'FirstName: {{FIRSTNAME}} {{#MIDDLENAME}}MiddleName: {{.}} {{/MIDDLENAME}}LastName: {{LASTNAME}}';
var
Mustache: TSynMustache;
Content: Variant;
begin
Mustache := TSynMustache.Parse(TEMPLATE);
TDocVariant.New(Content);
Content.FirstName := 'Joe';
Content.MiddleName := NULL; //you can also comment this line
Content.LastName := 'Doe';
WriteLn(Mustache.Render(Content));
ReadLn;
end.
以上是关于带胡子的条件渲染的主要内容,如果未能解决你的问题,请参考以下文章