使用 Handlebars 重复查找

2024-01-08

给定一个对象数组,我想使用嵌套对象的一个​​属性来查找 Handlebars 中关联对象的各种属性。

在此示例中,我想显示每所大学的学生列表,以及每个学生所属院系的信息。

我的代码有效,但嵌套查找非常重复:

{{lookup (lookup ../majors major) 'dean'}}
{{lookup (lookup ../majors major) 'location'}}

我能做些什么吗?我想访问查找的上下文,如下所示:

{{#lookup ../majors major}}
    {{dean}}
    {{location}}
{{/lookup}}
var source = $("#hb-template").html();
var template = Handlebars.compile(source);
var html = template(context);
$("#hb-html").html(html);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.6/handlebars.min.js"></script>

<script id="hb-template" type="text/x-handlebars-template">
  {{#universities}}
  <h1>{{name}}</h1>
  {{#students}}
  <h2>{{name}}</h2>
  <dl>
    <dt>Major</dt>
    <dd>{{major}}</dd>
    <dt>Department dean</dt>
    <dd>{{lookup (lookup ../majors major) 'dean'}}</dd>
    <dt>Department location</dt>
    <dd>{{lookup (lookup ../majors major) 'location'}}</dd>
  </dl>
  {{/students}}
  {{/universities}}
</script>

<div id="hb-html">
</div>

<script>
  var context = {
    "universities": [{
        "name": "Example University",
        "students": [{
            "name": "Alice",
            "major": "Business"
          },
          {
            "name": "John",
            "major": "English"
          }
        ],
        "majors": {
          "English": {
            "dean": "Dr. Smith",
            "location": "Room 101"
          },
          "Business": {
            "dean": "Dr. Jones",
            "location": "Room 999"
          }
        }
      },
      {
        "name": "Another University",
        "students": [{
          "name": "Bob",
          "major": "Business"
        }],
        "majors": {
          "Business": {
            "dean": "Dr. Zimmerman",
            "location": "South Campus"
          }
        }
      }
    ]
  };
</script>

这是我的解决方案:使用{{#with}} helper http://handlebarsjs.com/builtin_helpers.html#with并将查找子表达式的结果传递给它——一个对象。我不确定这是否是最好的方法,或者到底为什么它有效,所以希望得到评论。

{{#with (lookup ../majors major)}}
    <dt>Department dean</dt>
    <dd>{{dean}}</dd>
    <dt>Department location</dt>
    <dd>{{location}}</dd>
{{/with}}

完整示例:

var source = $("#hb-template").html();
var template = Handlebars.compile(source);
var html = template(context);
$("#hb-html").html(html);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.6/handlebars.min.js"></script>

<script id="hb-template" type="text/x-handlebars-template">
  {{#universities}}
  <h1>{{name}}</h1>
  {{#students}}
  <h2>{{name}}</h2>
  <dl>
    <dt>Major</dt>
    <dd>{{major}}</dd>
    {{#with (lookup ../majors major)}}
    <dt>Department dean</dt>
    <dd>{{dean}}</dd>
    <dt>Department location</dt>
    <dd>{{location}}</dd>
    {{/with}}
  </dl>
  {{/students}}
  {{/universities}}
</script>

<div id="hb-html">
</div>

<script>
  var context = {
    "universities": [{
        "name": "Example University",
        "students": [{
            "name": "Alice",
            "major": "Business"
          },
          {
            "name": "John",
            "major": "English"
          }
        ],
        "majors": {
          "English": {
            "dean": "Dr. Smith",
            "location": "Room 101"
          },
          "Business": {
            "dean": "Dr. Jones",
            "location": "Room 999"
          }
        }
      },
      {
        "name": "Another University",
        "students": [{
          "name": "Bob",
          "major": "Business"
        }],
        "majors": {
          "Business": {
            "dean": "Dr. Zimmerman",
            "location": "South Campus"
          }
        }
      }
    ]
  };
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Handlebars 重复查找 的相关文章

随机推荐

  • 如何垂直对齐弹性盒内的文本?

    我想使用 flexbox 来垂直对齐某个内容 li 但没有取得巨大成功 我在网上查了一下 很多教程实际上使用了一个包装 div 来获取align items center从父级的 Flex 设置中 但我想知道是否可以删除这个附加元素 我选择
  • 从不同路径检索 cookie

    我当前的文档 URL 是 http 127 0 0 1 foo 我需要更改 http 127 0 0 1 bar 的 cookie 值 document cookie 为空 因为文档的 URL 是 foo 目前 我只想读取 cookie 值
  • Wicked_pdf 在开发中工作正常,但在生产中却不行

    我一直在使用 wicked pdf 在 Rails 中生成一些 PDF 它在我的开发环境中运行良好 但是当我尝试在生产环境中生成 PDF 时 我收到 500 错误 但我的日志中没有具体错误 我注意到的第一件事是 wkhtmltopdf 二进
  • 将元数据添加到客户条带中

    因此我需要为客户添加一个唯一的标识符 通过条带元数据 这就是我现在完全完成的构建方式 但是我只有最后一部分来告诉我用户购买了哪个包 我试着看这里 计划条纹 https stripe com docs api php plans 代码在这里
  • 自动选择节点集群中的领导者

    在知道节点随时启动和关闭的情况下 可用于在节点集群中选择领先节点的最佳方法 算法是什么 如果可以用 Java 实现 那就更好了 我之前用Java实现过Paxos算法 它非常有用 而且相当简单 花了大约 16 个小时来制作一个演示 使用线程来
  • 如何为node.js服务器分配域名? [复制]

    这个问题在这里已经有答案了 我有一个node js服务器监听4000端口 访问该服务的URL是这样的 http 42 12 251 830 4000 我买了域名 www mydomain com 如何将其分配给我的服务器 首先我使用转发 但
  • 如何更改导航栏图标的颜色? (安卓工作室)

    To avoid confusion as to what the navigationbaractually is here s a 正如您所看到的 我使用以下方法添加了一种新颜色而不是标准黑色
  • 迭代 Torchtext.data.BucketIterator 对象会抛出 AttributeError 'Field' 对象没有属性 'vocab'

    当我尝试查看批次时 通过打印下一个迭代BucketIterator对象 即AttributeError被抛出 tv datafields Tweet TEXT Anger LABEL Fear LABEL Joy LABEL Sadness
  • 如何保存文本编辑中的文本

    帮助我 我想完成此代码并使用 Qt Widgets 从 PyQt5 中的文本编辑器保存文本文件 Q 文件对话框 get 保存文件名 帮我 我想在文本编辑器中写入文本并保存它 但我不知道如何完成 Save File 功能 Code from
  • 有 2 个未决意图的警报管理器只有 1 个有效?

    我设置了 2 个闹钟 一个用于通知 另一个用于执行一些任务 我的问题是 似乎只有一个警报起作用 通知服务 第一个警报设置 另一个警报永远不会响起 这是我的代码 Intent myIntent1 new Intent getApplicati
  • QWidget 用于显示带有小图片的文本(图标/表情符号)

    这样的小部件存在吗 我可以根据以下内容编写自己的小部件QLabels 和布局类似于http qt project org doc qt 5 qtwidgets layouts flowlayout example html http qt
  • 业力 - 找不到插件

    我正在尝试使用 karma 运行 js 测试用例 但总是出现插件未找到错误 有趣的是同一个配置文件 对我的其他同事来说工作得很好 这是日志 karma start karma conf js 04 10 2016 17 51 24 755
  • IsUnique=Yes 时唯一键和索引有什么区别?

    我有一个带有主键的表 但我希望约束另外两列 以便保证两者的组合始终是唯一的 一个愚蠢的例子 在 BOOKS 表中 IBAN 列是主键 但 Title 和 Author 列的组合也应该始终是唯一的 在 SQL Server Managemen
  • 从 ClientModelValidationContext 访问完整的 html 字段属性

    我有一个自定义验证属性 我正在将其从 asp net 转移到 asn net core 这是一个简单的 requiredif 属性 实现了 IClientModelValidator public class RequiredIfAttri
  • 为什么 std::string 没有隐式转换为 bool

    在 C 中是否有原因std string不是隐式转换为bool 例如 std string s if s s in not empty 与其他语言一样 例如 python 我认为使用它很乏味empty method 这大概could现在需要
  • 如何使用数组公式引用先前的匹配记录?

    我有一个项目电子表格 项目经理在每个月有一些活动的情况下输入每个项目的当前进度状态 因此 A B 和 C 列已填充 我需要能够使用 arrayformula 计算出 D 列 请注意 2019 年 6 月没有 项目 1 的活动 记录 我想我首
  • Scala - 如何将路径列表解析为 JSON 格式的目录结构

    我正在尝试创建一个嵌套目录结构 json 给定 scala 中的文件路径列表 例如 如果我有这样的路径列表 val a List a b c d e f runid1 a b c d e f runid2 a b c d e g runid
  • Linux 容器上的 Azure Function 的 Docker 问题 - 函数缺失导致函数运行时出现 404

    这个问题是这个问题的延续 在 Linux 容器上触发 Azure 函数 HTTP 函数不起作用 404 https stackoverflow com questions 61567697 azure function http trigg
  • SQL/VBA:如何按从每月第一天以外的一天开始的会计年度进行分组

    我正在尝试 使用 MS Access 按会计年度对一些数据进行分组 该会计年度可能与日历年度不同 如果每个会计年度总是从给定月份的第一天开始 那么解决方案很简单 可以简单地使用如下 if 语句 FY IIf Month orderdate
  • 使用 Handlebars 重复查找

    给定一个对象数组 我想使用嵌套对象的一个 属性来查找 Handlebars 中关联对象的各种属性 在此示例中 我想显示每所大学的学生列表 以及每个学生所属院系的信息 我的代码有效 但嵌套查找非常重复 lookup lookup majors