handlerbars.js जांचें कि क्या सूची खाली है


122

क्या सूची / संग्रह के माध्यम से जाने और पुनरावृति से पहले संग्रह या सूची शून्य या खाली है या नहीं, यह जांचने के लिए हैंडलबार्स जेएस में एक तरीका है?

// if list is empty do some rendering ... otherwise do the normal
{{#list items}}

{{/list}}



{{#each items}}

{{/each}}

जवाबों:


209

"प्रत्येक" टैग एक "और" खंड भी ले सकता है। तो सबसे सरल रूप है:

{{#each items}}
// render item
{{else}}
// render empty
{{/each}}

1
यह अच्छा है, लेकिन सवाल का जवाब नहीं है। यदि आप एक टैग को लपेटना चाहते हैं, तो एक टैग की #eachतरह <ul>( <li>एस के अंदर), आप नहीं चाहते कि रिक्त स्थिति को लपेटा जाए <ul>
लियोनार्डो राले जूल

236

यदि आपके पास कुछ ऐसा है जिसे आप केवल एक बार प्रदर्शित करना चाहते हैं और यदि सरणी में डेटा है तो उपयोग करें

{{#if items.length}}
    //Render
{{/if}}

.length खाली सरणियों के लिए 0 लौटाएंगे इसलिए हमने एक वास्तविक गलत मूल्य प्राप्त किया है।


1
दोनों उत्तर सही हैं और काम करते हैं, और वे प्रश्न का उत्तर देते हैं। जब सरणी में कोई डेटा नहीं है तो कुछ कैसे प्रदर्शित किया जाए। कोई और रास्ता नही।
Drejc

15
नहीं, मैं सहमत हूं, यह सही उत्तर है। इसमें लूप शामिल नहीं है।
रेडटेक

4
सरल मामला: मैं एक <ul>बार एक <li>टैग और सूची में प्रत्येक आइटम के लिए एक टैग प्रदान करना चाहता हूं । अगर सूची खाली है, तो मैं यह भी नहीं चाहता कि मैं <ul>रेंडर करूं , और <p>empty list<p>अंदर की तरह कुछ और प्रदान <ul>नहीं करना है।
फुअद सऊद

2
यह उत्तर कार्यान्वयन विशिष्ट है। हैंडल डॉक्स बनाएं जो []झूठे के रूप में मूल्यांकन किया जाता है। @Drejc का उत्तर, हैंडलबार विनिर्देश द्वारा सही उत्तर है।
स्टिम

1
शुक्रिया दोस्त जो रजिस्टरहेल्पर से बेहतर उपाय है।
डेनिश

38

ठीक है, मैंने सोचा था कि यह आसान है:

{{#if items}}
// render items

{{#each items}}
// render item
{{/each}}

{{else}}
// render empty
{{/if}}

5
यदि itemsएक खाली सरणी (जिसका मान है []), तो यह एक सत्य मान उत्पन्न करेगा। जबकि items.lengthएक खाली सरणी के लिए एक गलत मूल्य पैदा करता है। @ डुआने का जवाब देखें ।
गुफलाम

हुह ... 3 साल बीत चुके हैं ... यह हो सकता है कि कार्यान्वयन बदल गया है या कि मुझे सरल [] सरणी का कोई मामला नहीं था। जहाँ तक मुझे याद है यह मेरे लिए काम किया।
Drejc

12
आप सही हे। मैं preemptively देशी जे एस के 'व्यवहार के आधार पर टिप्पणी की ifहै, लेकिन Handlebars प्रलेखन बहुत स्पष्ट है: "अपने तर्क रिटर्न तो false, undefined, null, "", 0, या [], हैंडल ब्लॉक से नहीं चल पाएगी।" मुझे पहले डॉक्स की जाँच करनी चाहिए थी।
गुफलाम

8

यदि आप जांचना चाहते हैं कि कोई संग्रह (कर्सर) खाली है या नहीं, तो पिछले उत्तर उपयोगी नहीं होंगे, इसके बजाय आपको count()विधि का उपयोग करना होगा :

{{#if items.count}}
    <p>There is {{items.count}} item(s).</p>
{{else}}
    <p>There is nothing</p>
{{/if}}

2
@BasicWolf यह नहीं करता है, कर्सर के साथ काम करता है, अगर आप के बजाय सरणी का उपयोग लंबाई है।
कार्ल।

यह एक सरणी और एक वस्तु के बीच की जांच करने के लिए, और उन्हें अलग तरीके से संभालने के लिए बहुत अच्छा काम करता है।
रयान वाल्टन

2

{{#If}} के शीर्ष पर {{# #}} ​​का उपयोग करने की आवश्यकता वाले किसी भी व्यक्ति के लिए (अर्थात यदि लूप के लिए एक लूप है)। क्या उनके पास सरणियों की तीन अलग-अलग सूची है।

यदि किसी कथन के अंदर लुकअप का उपयोग करना मेरे लिए समस्या को हल करता है। जैसा कि, उपरोक्त उत्तरों से मेरी समस्या का समाधान नहीं हुआ।

यहाँ मेरा कोड है,

{{#each OtherRandomItems}}

  {{this}}

  {{lookup ../AnotherRandomItems @index}}

  {{#if (lookup ../RandomItems @index)}}
  // render items
  {{else}}
  // render empty
  {{/if}}

{{/each}}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.