ฉันจะเข้าถึงไอเท็มอาร์เรย์การเข้าถึงโดยใช้ดัชนีในแฮนด์บาร์ได้อย่างไร?


270

ฉันพยายามระบุดัชนีของรายการในอาร์เรย์ภายในแม่แบบแฮนด์บาร์:

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

ใช้สิ่งนี้:

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

หากเป็นไปไม่ได้ฉันจะเขียนผู้ช่วยที่สามารถเข้าถึงรายการ spefic ภายในอาร์เรย์ได้อย่างไร

คำตอบ:


409

ลองสิ่งนี้:

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

26
นี่ไม่ใช่เอกสารทุกที่! น่ากลัว
lukemh

25
ฉันได้รับExpecting 'ID'ข้อผิดพลาดกับ {{user.links.websites.1}} หรือ {{user.links.websites.0}}
Olivier Lalonde

131
@OlivierLalonde {{ websites.[0] }}ผมต้องใช้สิ่งที่ต้องการ
แมตต์

4
อันที่จริง @Matt นั้นไม่ได้เป็นเพียงรูปแบบโชคดี แต่เป็นไวยากรณ์ที่บันทึกไว้ (ดูคำตอบของฉัน)
Arjan

5
สิ่งที่เกี่ยวกับองค์ประกอบสุดท้ายในอาร์เรย์?
winduptoy

319

ต่อไปนี้มีจุดเพิ่มเติมก่อนที่ดัชนีจะทำงานตามที่คาดไว้ นี่คือวงเล็บเหลี่ยมเป็นทางเลือกเมื่อดัชนีถูกตามด้วยคุณสมบัติอื่น:

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

อย่างไรก็ตามจำเป็นต้องใช้วงเล็บเหลี่ยมใน:

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

ในระยะหลังการใช้หมายเลขดัชนีโดยไม่มีเครื่องหมายวงเล็บเหลี่ยมจะได้หนึ่ง:

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

นอกเหนือจาก: วงเล็บคือ (ยัง) ใช้สำหรับไวยากรณ์ตัวอักษรส่วนเพื่ออ้างถึงตัวบ่งชี้ที่แท้จริง (ไม่ใช่ตัวเลขดัชนี) ที่จะไม่ถูกต้อง รายละเอียดเพิ่มเติมในตัวระบุที่ถูกต้องคืออะไร

(ทดสอบกับแฮนด์บาร์ใน YUI)

2.xx อัปเดต

ตอนนี้คุณสามารถใช้ตัวgetช่วยนี้:

(get people index)

แม้ว่าคุณจะได้รับข้อผิดพลาดเกี่ยวกับดัชนีที่ต้องเป็นสตริงให้ทำ:

(get people (concat index ""))

10
นี่ควรเป็นคำตอบเพราะมันละเอียดกว่าคำตอบที่เลือก การขอวงเล็บเหลี่ยมเมื่อดัชนีอยู่ท้ายฉันติดอยู่พักหนึ่ง!
modulitos

นี่มันหลอก! ขอบคุณ ... คำตอบที่เลือกด้านบนไม่ได้โปรดทำเครื่องหมายว่าถูกต้อง
MarioAraya

1
แก้ปัญหาการทำงานให้ฉันใช้{{#with people.1}} com.github.jknack:handlebars:4.1.2
Ferran Maylinch

21
{{#each array}}
  {{@index}}
{{/each}}

เยี่ยมมากนี่คือคำตอบที่ถูกต้อง @ ดัชนีจะให้ตำแหน่งในอาร์เรย์
Oscar Romero

17

หากคุณสมบัติที่ไม่มีเอกสารไม่ใช่เกมของคุณคุณสามารถทำสิ่งเดียวกันได้ที่นี่:

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

จากนั้นในเทมเพลต

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

ฉันเขียนข้างต้นก่อนที่จะได้รับการระงับ

this.[0]

ฉันไม่เห็นว่าใครจะไปถึงแฮนด์บาร์โดยที่ไม่ต้องเขียนผู้ช่วยเหลือของคุณ



8

โปรดลองสิ่งนี้หากคุณต้องการดึงข้อมูลครั้งแรก / ครั้งสุดท้าย

{{#each list}}

    {{#if @first}}
        <div class="active">
    {{else}}
        <div>
    {{/if}}

{{/each}}


{{#each list}}

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

{{/each}}

7

ในขณะที่คุณวนลูปในอาเรย์ด้วยeachและถ้าคุณต้องการเข้าถึงอาเรย์อื่นในบริบทของไอเท็มปัจจุบันคุณก็ทำเช่นนี้

นี่คือข้อมูลตัวอย่าง

[
  {
    ชื่อ: 'foo'
    attr: ['boo', 'zoo']
  }
  {
    ชื่อ: 'บาร์'
    attr: ['ไกล', 'zar']
  }
]

นี่คือแฮนด์บาร์เพื่อรับไอเท็มแรกในattrอาร์เรย์

{{#each player}}
  <p> {{this.name}} </p>

  {{# ด้วย this.attr}}
    <p> {{this. [0]}} </p>
  {{/}} ด้วย

{{/แต่ละ}}

สิ่งนี้จะออก

<p> foo </p>
<p> boo </p>

<p> แถบ </p>
<p> ไกล </p>

ถ้าอาร์เรย์ attr มีจำนวนขององค์ประกอบที่แตกต่างกันสำหรับวัตถุที่แตกต่างกันแล้วสิ่งที่จะเป็นกระบวนการที่จะทำซ้ำผ่านมันได้หรือไม่ ตัวอย่างเช่น: [{name: 'foo', attr: ['boo', 'zoo']}, {name: 'bar', attr: ['ไกล', 'zar', 'sar]}] แล้วจะเป็นอย่างไร คุณจะแสดงให้เห็นถึง attr ทั้งหมดสำหรับทุกวัตถุของอาร์เรย์หรือไม่
Partha Roy

ฉันไม่ได้ลอง แต่ฉันคิดว่าใน {{#with this.attr}} thisนี้จะทำงานแทนthis.[0]
Fatih Acet

1

สามารถใช้ไวยากรณ์ต่อไปนี้ได้หากไม่มีการตั้งชื่ออาร์เรย์ (เฉพาะอาร์เรย์ที่ส่งผ่านไปยังเทมเพลต):

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

0

ในกรณีของฉันฉันต้องการเข้าถึงอาร์เรย์ภายในตัวช่วยที่กำหนดเองเช่นนั้น

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

ซึ่งไม่ได้ผล แต่คำตอบที่แนะนำโดย @julesbou ทำงาน

รหัสการทำงาน:

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

หวังว่านี่จะช่วยได้! ไชโย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.