javascript - mustache 在不使用索引名称的情况下模板化对象

标签 javascript mustache

我有一个看起来像下面代码的对象:我不知道它们可以变化的内部对象的名称,我如何创建一个不关心名称但循环遍历嵌套数组的模板卡片?

Cards: {
DynamicName2: [..]
DynamicName3: [..]
DynamicName4: [..]
DynamicName5: [..]
DynamicName6: [..]

}

模板

<script type="mustache/x-tmpl" id="pack_tmpl">
{{#Cards}}
 {{.}}
//foreach inner object do this:
<ul>
</ul>

{{/Cards}}
</script> 

最佳答案

您必须先在 Javascript 中修改您的模型。只需将“Cards”的每个命名属性转换为数组条目即可。然后在渲染时将新模型传递给模板:

function extractDynamicCards(model) {
  var cardModel = [];
  for (var dn in model.Cards) {
    cardModel.push(model.Cards[dn]);
  }
  return {Cards: cardModel};
}

编辑 以下是示例脚本之前和之后

<script type="mustache/x-tmpl" id="pack_tmpl1">
<ul>
    <li>{{Cards.DynamicName2.d}}</li>
    <li>{{Cards.DynamicName3.d}}</li>
</ul>
</script>

<script type="mustache/x-tmpl" id="pack_tmpl2">
<ul>
    {{#Cards}}
      <li>{{d}}</li>
    {{/Cards}}
</ul>
</script>

<h2>Result 1</h2>
<div id="result1"></div>

<h2>Result 2</h2>
<div id="result2"></div>

对于以下数据:

<script type="text/javascript">
var model = {
  Cards: {
    DynamicName2: { d: "data-2" },
    DynamicName3: { d: "data-3" },
    DynamicName4: { d: "data-4" },
    DynamicName5: { d: "data-5" },
    DynamicName6: { d: "data-6" },
  }
}

function extractDynamicCards(model) {
  var cardModel = [];
  for (var dn in model.Cards) {
    cardModel.push(model.Cards[dn]);
  }
  return {Cards: cardModel};
}

var source1   = $("#pack_tmpl1").html();
var template1 = Hogan.compile(source1);
$('#result1').html(template1.render(model));

var source2   = $("#pack_tmpl2").html();
var template2 = Hogan.compile(source2);
$('#result2').html(template2.render(extractDynamicCards(model)));
</script>

您可以看到这一切都在使用这个 JSFiddle

关于javascript - mustache 在不使用索引名称的情况下模板化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21946831/

相关文章:

javascript - 带点击控件的嵌套水平 slider

javascript - 使用 switch 和 if else 语句来切换 JavaScript 计算器模式

javascript - 标记 event.listener 迭代问题,Laravel

javascript - 使用 Node JS 在 Firebase 托管中单独路由

带有 key :object 的 JavaScript json

javascript - 允许在没有 {{#open_tag}} 和 {{#close_tag}} 的情况下包装内容的客户端/服务器模板系统?

node.js - 如何让 grunt 任务将 mustache 部分呈现为静态 HTML

mustache - PHP mustache 。隐式迭代器 : How to get key of current value(numeric php array)

mustache - 使用 Mustache.js 嵌入原始 JSON

javascript - 如何调试 Mustache js 模板?