如何使 Mustache 逻辑标签发挥作用

How to make Mustache logic tags functional

我目前正在使用 C# 来 create/parse 一个 JSON 文件,然后用它来填充小胡子模板。

我已经使用 Nustache 的 NuGet 包将 Nustache 安装到 VB。

我的 JSON 文件如下所示:

{
  "LinkName": "test",
  "TESTBOOL": true,
  "NodeProfileENUM": "TEST",
  "Requester": false,
  "Responder": false,
  "Nodes": {
    "Root": {
      "nodeName": "Root",
      "displayName": null,
      "type": null,
      "initialValue": null,
      "serializable": null,
      "className": null,
      "enumName": null,
      "isLast": true,
      "actionList": {}
    }
  },
  "LinkActions": {}
}

在我的模板中,我尝试使用如下标签:

{{#TESTBOOl}} test {{/TESTBOOL}}

但我一直收到一条错误消息,提示该块未注册,

我还尝试遍历“节点”部分:

{{#each Nodes}}
{{#each this}}
{{this.nodeName}}
{{/each}}
{{/each}}

但这也不起作用。

我正在像这样解析和呈现 json 和模板 (C#):

string nodeProfileFormat = File.ReadAllText("NodeProfileTemplate2.txt");

JObject parsedLinkTest = 
JObject.Parse(File.ReadAllText("LinkDefinitionTest.json"));

string nodeProfileResultTest = 
Nustache.Core.Render.StringToString(nodeProfileFormat, parsedLinkTest);

File.WriteAllText("NodeProfileTemplateResult.java", nodeProfileResultTest);

有什么我忘记做的事吗?

要测试您的模板,请使用 moustache's demo。如果您更正拼写错误,您的 TESTBOOL 模板将正常工作:

{{#TESTBOOL}} test {{/TESTBOOL}}

如果你想显示 nodeName 你必须做:

{{Nodes.Root.nodeName}}

您的 json 仅包含对象。您的节点不是数组。也许您正在寻找迭代属性。

关于你的C#,你可以使用NustacheFileToFile方法:

var parsedLinkTest = JObject.Parse(File.ReadAllText("LinkDefinitionTest.json"));
Nustache.Core.Render.FileToFile("NodeProfileTemplate2.txt", parsedLinkTest, "NodeProfileTemplateResult.java");

如果失败,请使用调试器检查 parsedLinkTest 是否填满。