【问题标题】:Use Handlebars lookup helper to access Object in array and output property使用 Handlebars 查找助手访问数组和输出属性中的对象
【发布时间】:2017-07-26 15:58:06
【问题描述】:

我正在使用车把查找助手根据索引在数组中查找对象。

不幸的是,我无法输出对象的属性。

HTML:

 <script id="entry-template" type="text/x-handlebars-template">
      <div class="entry">
        <h1>Employees</h1>
        <div class="body">
          <ul>
            <li> 1.Employee {{lookup this 0}}</li>
            <li> 2.Employee {{lookup this 1}}</li>
          </ul>
        </div>
      </div>
    </script>

    <div id="content">

    </div>

Javascript:

var employees = [ { name : 'Joe'}, { name : 'Bob'} ];

var source   = $("#entry-template").html();
var template = Handlebars.compile(source);

var html    = template(employees);

$('#content').append(html);

和 jsfiddle:https://jsfiddle.net/sgu2mmdz/1/

这是一个简化的示例来演示我的问题。我知道有更简单的方法,所以使用 each 帮助器输出名称

编辑:这是一个更新的 jsfiddle 版本,更接近我需要实现的目标:https://jsfiddle.net/sgu2mmdz/6/

【问题讨论】:

    标签: javascript handlebars.js


    【解决方案1】:

    您可以使用this.&lt;index&gt;.&lt;property&gt; 直接访问数组对象。因此,在您的情况下,从employees 数组中的第一个元素获取名称类似于this.0.name。这是更新的小提琴:https://jsfiddle.net/sgu2mmdz/3/

    我希望这是你想要的。当然,正如您在问题中提到的,也可以使用each 来完成。

    另外,我建议您使用log 来调试此类问题。它通常可以帮助您确定自己做错了什么。

    var employees = [ { name : 'Joe'}, { name : 'Bob'} ];
    
    var source   = $("#entry-template").html();
    var template = Handlebars.compile(source);
    
    var html    = template(employees);
    
    $('#content').append(html);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.10/handlebars.js"></script>
    
    <script id="entry-template" type="text/x-handlebars-template">
          <div class="entry">
            <h1>Employees</h1>
            <div class="body">
              <ul>
                <li> 1.Employee {{this.0.name}}</li>
                <li> 2.Employee {{this.1.name}}</li>
              </ul>
            </div>
          </div>
        </script>
    
        <div id="content">
    
        </div>

    【讨论】:

    • 嗨@Nisarg,感谢您的回复。我提供了一个简化的示例,但我认为我真的必须通过查找来访问数据。我更新了我的 jsfiddle,所以它更类似于我实际需要实现的目标......jsfiddle.net/sgu2mmdz/6
    • 我不确定我是否完全理解您的问题,但您可以使用with 语法。我刚刚用{{#with (lookup this @index)}}{{this.name}}{{/with}} 替换了{{lookup this @index}},它就可以工作了。我不确定这是否是最好的方法,因为我从来没有遇到过这样的问题。这是小提琴:jsfiddle.net/sgu2mmdz/7
    猜你喜欢
    • 2020-05-04
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2015-08-03
    相关资源
    最近更新 更多