0

mustache.js 是否支持这样的表达方式?-> {{type == "a"}}

我该怎么办?

小胡子:</p>

{{#items}}
  {{type == "a"}} 
    <li>{{name}} {{type}}</li>
  {{/link}}
  {{type == "b"}} 
    <strong>{{name}} {{type}}</strong>
  {{type == "c"}} 
    <span>{{name}} {{type}}</span>
  {{/link}}
{{/items}}

JSON:</p>

{
  "header": "Colors",
  "items": [
      {"name": "red", "type": "a", "url": "#Red"},
      {"name": "green", "type": "b", "url": "#Green"},
      {"name": "blue", "type": "c", "url": "#Blue"}
  ],
  "empty": false
}

想要输出:

<li>red a</li>
<strong>green b</strong>
<span>blue c</span>
4

1 回答 1

0

你不能,因为 Mustache 没有逻辑。

最佳实践是以“逻辑”已包含在输入中的方式更改您的输入 JSON。就像是:

{
  "header": "Colors",
  "items": [
      {"a": {"name": "red", "url": "#Red"}},
      {"b": {"name": "green", "url": "#Green"}},
      {"c": {"name": "blue", "url": "#Blue"}}
  ],
  "empty": false
}

然后:

{{#items}}
  {{#a}}
    <li>{{name}} {{type}}</li>
  {{/a}}
  {{#b}}
    <strong>{{name}} {{type}}</strong>
  {{/b}}
  {{#c}}
    <span>{{name}} {{type}}</span>
  {{/c}}
{{/items}}

会产生你想要的。

编辑 不知何故我无法让上面的例子工作。我正在使用 Hogan(由 Twitter 维护的 mustache 版本,速度更快,并且你可以用它做一些额外的事情,一定要检查一下)但我很确定它没有任何东西与上述内容应该可以正常工作的事实有关。

无论如何,我可以在提供的演示页面上进行以下操作,该页面与原始示例更接近,并完成了您想要的输出。一般说明:您可以检查字段是否存在(例如使用{{#isa}}),但标签中不能有任何其他逻辑。

{{#items}}
  {{#isa}}
   <li><strong>{{name}}</strong></li>
  {{/isa}}
  {{#isb}}
   <li><a href="{{url}}">{{name}}</a></li>
  {{/isb}}
  {{#isc}}
    <li><span href="{{url}}">{{name}}</span ></li>
  {{/isc}}
{{/items}}

JSON

{
  "header": "Colors",
  "items": [
      {"name": "red", "isa": true, "url": "#Red"},
      {"name": "green", "isb": true, "url": "#Green"},
      {"name": "blue", "isc": true, "url": "#Blue"}
  ],
  "empty": false
}

hth

于 2012-06-12T16:54:56.827 回答