Làm cách nào để truy cập một mục mảng truy cập theo chỉ mục trong tay cầm?


270

Tôi đang cố gắng chỉ định chỉ mục của một mục trong một mảng trong mẫu tay lái:

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

Sử dụng cái này:

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

Nếu điều trên là không thể, làm thế nào tôi có thể viết một trình trợ giúp có thể truy cập vào một mục spefic trong mảng?

Câu trả lời:


409

Thử cái này:

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

26
Điều này không được ghi nhận ở bất cứ đâu! Tuyệt vời.
lukemh

25
Tôi đang gặp Expecting 'ID'lỗi với {{user.links.websites.1}} hoặc {{user.links.websites.0}}
Olivier Lalonde

131
@OlivierLalonde, tôi đã phải sử dụng một cái gì đó như {{ websites.[0] }}.
Matt

4
Thật vậy, @Matt, đó không chỉ là một định dạng may mắn, mà là loại cú pháp được ghi lại. (Xem câu trả lời của tôi.)
Arjan

5
Còn phần tử cuối cùng trong một mảng thì sao?
Winduptoy

319

Sau đây, với một dấu chấm bổ sung trước chỉ mục , hoạt động như mong đợi. Ở đây, dấu ngoặc vuông là tùy chọn khi chỉ mục được theo sau bởi một thuộc tính khác:

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

Tuy nhiên, dấu ngoặc vuông được yêu cầu trong:

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

Trong trường hợp sau, sử dụng số chỉ mục không có dấu ngoặc vuông sẽ nhận được một:

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

Bên cạnh đó: các dấu ngoặc (cũng) được sử dụng cho cú pháp theo phân đoạn , để chỉ các mã định danh thực tế (không phải số chỉ mục) nếu không sẽ không hợp lệ. Thêm chi tiết trong Định danh hợp lệ là gì?

(Đã thử nghiệm với Tay cầm trong YUI.)

2.xx Cập nhật

Bây giờ bạn có thể sử dụng trình gettrợ giúp cho việc này:

(get people index)

mặc dù nếu bạn gặp lỗi về chỉ mục cần phải là một chuỗi, hãy làm:

(get people (concat index ""))

10
Đây phải là câu trả lời vì nó kỹ lưỡng hơn câu trả lời được chọn. Yêu cầu dấu ngoặc vuông khi chỉ mục ở cuối khiến tôi bị kẹt trong một thời gian!
modulitos

điều này đã lừa cảm ơn ... câu trả lời được chọn ở trên không, xin vui lòng đánh dấu câu này là chính xác.
MarioAraya

1
Các {{#with people.1}}giải pháp làm việc cho tôi, sử dụng com.github.jknack:handlebars:4.1.2.
Ferran Maylinch

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

Tuyệt vời, đây là câu trả lời chính xác. @index sẽ cung cấp cho bạn vị trí trong mảng.
Oscar Romero

17

Nếu các tính năng không có giấy tờ không phải là trò chơi của bạn, điều tương tự có thể được thực hiện ở đây:

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

Sau đó trong một mẫu

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

Tôi đã viết ở trên trước khi tôi có được một

this.[0]

Tôi không thể thấy một người đi quá xa với tay lái mà không viết người trợ giúp của riêng bạn.



8

Vui lòng thử điều này, nếu bạn muốn tìm nạp trước / cuối.

{{#each list}}

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

{{/each}}


{{#each list}}

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

{{/each}}

7

Trong khi bạn đang lặp trong một mảng với eachvà nếu bạn muốn truy cập vào một mảng khác trong ngữ cảnh của mục hiện tại, bạn sẽ làm như thế này.

Dưới đây là dữ liệu ví dụ.

[
  {
    tên: 'foo',
    attr: ['boo', 'sở thú']
  },
  {
    tên: 'thanh',
    attr: ['xa', 'zar']
  }
]

Dưới đây là các tay lái để có được mục đầu tiên trong attrmảng.

{{#each người chơi}}
  <p> {{this.name}} </ p>

  {{# với điều này.attr}}
    <p> {{này. [0]}} </ p>
  {{/với}}

{{/mỗi}}

Điều này sẽ xuất

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

<p> thanh </ p>
<p> xa </ p>

Nếu mảng attr có số phần tử khác nhau cho các đối tượng khác nhau thì quá trình lặp lại qua nó là gì? ví dụ: [{name: 'foo', attr: ['boo', 'zoo']}, {name: 'bar', attr: ['far', 'zar', 'sar]}] thì thế nào bạn sẽ hiển thị tất cả các attr cho mọi đối tượng của mảng?
Partha Roy

tôi đã không thử nhưng tôi cho rằng trong {{#with this.attr}} thissẽ hoạt động thay vìthis.[0]
Fatih Acet 17/03/2016

1

Cú pháp sau đây cũng có thể được sử dụng nếu mảng không được đặt tên (chỉ mảng được truyền cho mẫu):

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

0

Trong trường hợp của tôi, tôi muốn truy cập một mảng bên trong một trình trợ giúp tùy chỉnh như vậy,

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

Cái nào không hiệu quả, nhưng câu trả lời được đề xuất bởi @julesbou đã có hiệu quả.

Mã làm việc:

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

Hi vọng điêu nay co ich! Chúc mừng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.