【问题标题】:How do I access an access array item by index in handlebars?如何通过把手中的索引访问访问数组项?
【发布时间】:2011-12-24 01:25:25
【问题描述】:

我正在尝试在车把模板内的数组中指定项目的索引:

{
  people: [
    {"name":"Yehuda Katz"},
    {"name":"Luke"},
    {"name":"Naomi"}
  ]
}

使用这个:

<ul id="luke_should_be_here">
{{people[1].name}}
</ul>

如果上述方法不可行,我将如何编写一个可以访问数组中特定项目的帮助程序?

【问题讨论】:

    标签: javascript handlebars.js


    【解决方案1】:

    如果你想使用动态变量

    这行不通:

    {{#each obj[key]}}
    ...
    {{/each}}
    

    你需要做的:

    {{#each (lookup obj key)}}
    ...
    {{/each}}
    

    handlebars lookup helperhandlebars subexpressions

    【讨论】:

    • 查找在这里工作,即使索引来自前一个块的列表:{{lookup ../../btnPercentages @../index}}
    【解决方案2】:

    就我而言,我想像这样访问自定义助手中的数组,

    {{#ifCond arr.[@index] "foo" }}
    

    这不起作用,但@julesbou 建议的答案有效。

    工作代码:

    {{#ifCond (lookup arr @index) "" }}
    

    希望这会有所帮助!干杯。

    【讨论】:

    • 在这种情况下如何调整索引值?即我想比较 index 和 index - 1 的值(不起作用)。谢谢。
    【解决方案3】:

    如果未记录的功能不是您的游戏,也可以在这里完成:

    Handlebars.registerHelper('index_of', function(context,ndx) {
      return context[ndx];
    });
    

    然后在模板中

    {{#index_of this 1}}{{/index_of}}   
    

    我在掌握之前写了上面的内容

    this.[0]
    

    如果不编写自己的帮助程序,我无法看到一个人在车把方面走得太远。

    【讨论】:

      【解决方案4】:

      以下内容,在索引前有一个额外的点,按预期工作。这里,当索引后跟另一个属性时,方括号是可选的:

      {{people.[1].name}}
      {{people.1.name}}
      

      但是,方括号是必需的,在:

      {{#with people.[1]}}
        {{name}}
      {{/with}}
      

      在后者中,使用不带方括号的索引号将得到一个:

      Error: Parse error on line ...:
      ...     {{#with people.1}}                
      -----------------------^
      Expecting 'ID', got 'INTEGER'
      

      顺便说一句:括号(也)用于segment-literal syntax,指的是否则将无效的实际标识符(不是索引号)。更多详情What is a valid identifier?

      (在 YUI 中使用 Handlebars 测试。)

      2.xx 更新

      您现在可以为此使用 get 助手:

      (get people index)
      

      虽然如果您收到关于 index 需要为字符串的错误,请执行以下操作:

      (get people (concat index ""))
      

      【讨论】:

      • 这应该是答案,因为它比选择的答案更彻底。当索引在末尾时需要方括号让我卡了一段时间!
      • 这成功了!谢谢...上面选择的答案没有,请将此标记为正确。
      • {{#with people.1}} 解决方案对我有用,使用 com.github.jknack:handlebars:4.1.2
      • 试图找到一种方法来调整索引号,以便我可以检查循环中前一项的值与该值。有什么想法吗?
      【解决方案5】:

      当您使用each 在数组中循环时,如果您想在当前项目的上下文中访问另一个数组,您可以这样做。

      这是示例数据。

      [ { 名称:'foo', attr:['嘘','动物园'] }, { 名称:'酒吧', attr:['远','zar'] } ]

      这是获取attr数组中第一项的把手。

      {{#每个玩家}}

      {{this.name}}

      {{#with this.attr}}

      {{this.[0]}}

      {{/和}} {{/每个}}

      这将输出

      条形

      【讨论】:

      • 如果 attr 数组对于不同的对象有不同数量的元素,那么迭代它的过程是什么?例如:[ { name: 'foo', attr: [ 'boo', 'zoo' ] }, { name: 'bar', attr: [ 'far', 'zar','sar ] } ] 那么怎么样你要显示数组中每个对象的所有属性吗?
      • 我没有尝试过,但我认为在 {{#with this.attr}} this 会工作而不是 this.[0]
      【解决方案6】:

      试试这个:

      <ul id="luke_should_be_here">
      {{people.1.name}}
      </ul>
      

      【讨论】:

      • 我在 {{user.links.websites.1}} 或 {{user.links.websites.0}} 中收到 Expecting 'ID' 错误
      • @OlivierLalonde,我不得不使用 {{ websites.[0] }} 之类的东西。
      • 确实,@Matt,这不仅仅是一些幸运的格式,而是一种记录在案的语法。 (见我的回答。)
      • 对于 ember.js,我不得不做类似people.content.1.name
      • @lukemh 车把中的很多东西要么记录不充分,要么在任何地方都没有记录。耶耶耶....
      【解决方案7】:
      {{#each array}}
        {{@index}}
      {{/each}}
      

      【讨论】:

      • 太棒了,这是正确答案。 @index 将为您提供数组中的位置。
      • 正确答案,谁能帮助我如何打印从 1 开始的索引。默认情况下它从 0 开始。
      【解决方案8】:

      如果数组没有命名(只是数组被传递给模板),也可以使用以下语法:

        <ul id="luke_should_be_here">
        {{this.1.name}}
        </ul>
      

      【讨论】:

        【解决方案9】:

        如果你想获取第一个/最后一个,请试试这个。

        {{#each list}}
        
            {{#if @first}}
                <div class="active">
            {{else}}
                <div>
            {{/if}}
        
        {{/each}}
        
        
        {{#each list}}
        
            {{#if @last}}
                <div class="last-element">
            {{else}}
                <div>
            {{/if}}
        
        {{/each}}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多