วิธีค้นหาความยาวอาร์เรย์ภายในเทมเพลต Handlebar


87

ฉันมีเทมเพลต Handlebars ซึ่งแสดงผลโดยใช้วัตถุ json ใน json นี้ฉันกำลังส่งอาร์เรย์ แบบนี้:

var json = {
               "array":["abc","def","ghi","jkl"] 
}

ตอนนี้ในเทมเพลตของฉันฉันต้องการหาความยาวของอาร์เรย์นี้ สิ่งที่ต้องการ:

{{#each item}}
   {{ array.length }}
{{/each}}

ไม่พบข้อมูลนี้ในเอกสาร Handlebars

คำตอบ:


189

ความผิดฉันเอง....

{{array.length}}ใช้งานได้จริงภายในเทมเพลต ควรตรวจสอบ / ทดสอบก่อนโพสต์ที่นี่


37
คุณช่วยฉันไม่ให้ต้องทดสอบมันขอบคุณมาก :)
Perry Tew

8
สิ่งนี้ไม่ได้ผลอย่างน้อยสำหรับแฮนด์บาร์รส Mandrills สำหรับทุกคนที่สงสัย ฉันยังไม่พบอุปกรณ์ทดแทนที่เหมาะสม
oneirois

44

ในกรณีนี้คุณต้องอ้างอิงตัวแปรหลักของแต่ละตัวแปรจากภายในแต่ละบล็อก:

{{#each array}}
    {{../array.length}}
{{/each}}

ฉันคิดว่าตัวแปรของคุณที่มีชื่อว่า "array" อาจทำให้เกิดปัญหาขึ้นเช่นกัน สมมติว่า JSON ที่แตกต่างกันเพื่อชี้แจง:

var json = {
    "fruit":["apple","orange","banana"]
};

จากนั้นทำสิ่งนี้:

<ul>
    {{#each fruit}}
        <li>{{this}} {{@index}} {{../fruit.length}}</li>
    {{/each}}
</ul>

จะให้ผล:

<ul>
    <li>apple 0 3</li>
    <li>orange 1 3</li>
    <li>banana 2 3</li>
</ul>

1
ฉันคิดว่ารายการจะเป็นapple 0 3 orange 1 3 banana 2 3
พอล

@ พอลคุณถูกต้องตัวอย่างที่อัปเดตเพื่อแสดงผลลัพธ์ที่ถูกต้อง
Kevin Powell

คำถามที่เกี่ยวข้อง: คุณจะได้ความยาวของอาร์เรย์ได้อย่างไรเมื่อเป็นค่าไปป์ไลน์ปัจจุบัน?
Gyscos

คำตอบนี้มีเหตุผลมากกว่าคำตอบที่ยอมรับ
Neil Monroe

นี่เป็นคำตอบที่ดีและควรเลือกให้ถูกต้อง!
Aditya Rao

2

คุณสามารถกำหนดตัวช่วยง่ายๆเพื่อจัดการได้:

Handlebars.registerHelper('get_length', function (obj) {
 return obj.length;
});   

จากนั้นใช้ในเทมเพลตของคุณเช่น:

{{get_length some_object}}

2

หากคุณกำลังทดสอบรายการว่างเพื่อแสดงเนื้อหา ... ใน Ember.js ที่ใช้แฮนด์บาร์คุณสามารถมีรายการอื่นสำหรับ #each

{{#each blah as |blah|}}

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