मैं हैंडलबार्स में इंडेक्स द्वारा एक्सेस ऐरे आइटम का उपयोग कैसे करूं?


270

मैं एक सरणी में एक आइटम के सूचकांक को एक हैंडलबार टेम्पलेट के भीतर निर्दिष्ट करने की कोशिश कर रहा हूं:

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

इसका उपयोग करते हुए:

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

यदि उपरोक्त संभव नहीं है, तो मैं एक सहायक कैसे लिखूंगा जो सरणी के भीतर एक स्थानिक वस्तु तक पहुंच सकता है?

जवाबों:


409

इसे इस्तेमाल करे:

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

26
यह कहीं भी प्रलेखित नहीं है! बहुत बढ़िया।
lukemh

25
मैं Expecting 'ID'{{user.links.websites.1}} या {{user.links.websites.0}} के साथ त्रुटि प्राप्त कर रहा हूं
ओलिवियर

131
@OlivierLalonde, मुझे कुछ ऐसा उपयोग करना था {{ websites.[0] }}
मैट

4
वास्तव में, @Matt, जो केवल कुछ भाग्यशाली प्रारूप नहीं है, बल्कि एक तरह से प्रलेखित वाक्यविन्यास है। (मेरा जवाब देखें।)
अर्जन

5
एक सरणी में अंतिम तत्व के बारे में क्या?
विंडपोय

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

यह चाल चली! धन्यवाद ... इस के ऊपर चुना जवाब नहीं था, कृपया इसे सही के रूप में चिह्नित करें।
मारियोएराया

1
{{#with people.1}}समाधान मेरे लिए काम किया, का उपयोग करते हुए com.github.jknack:handlebars:4.1.2
फेरन मायलिनच


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और यदि आप वर्तमान आइटम के संदर्भ में किसी अन्य एरे को एक्सेस करना चाहते हैं तो आप इसे इस तरह से करते हैं।

यहाँ उदाहरण डेटा है।

[
  {
    नाम: 'फू',
    attr: ['बू', 'चिड़ियाघर']
  },
  {
    नाम: 'बार',
    attr: ['दूर', 'ज़ार']
  }
]

यहाँ attrसरणी में पहला आइटम प्राप्त करने के लिए हैंडलबार है ।

{{#each खिलाड़ी}}
  <p> {{this.name}} </ p>

  {{# इस के साथ।}}
    <p> {{यह। [0]}} </ p>
  {{/साथ में}}

{{/से प्रत्येक}}

यह आउटपुट करेगा

<p> फू </ p>
<p> बू </ p>

<p> बार </ p>
<p> दूर </ p>

यदि विभिन्न वस्तुओं के लिए एटर सरणी में तत्वों की संख्या अलग है, तो इसके माध्यम से पुनरावृति करने की प्रक्रिया क्या होगी? उदाहरण के लिए: [{name: 'foo', attr: ['boo', 'zoo']}, {name: 'bar', attr: ['far', 'zar', 'sar]}] फिर कैसे हैं आप सरणी के हर वस्तु के लिए सभी attr दिखाने जा रहे हैं?
पार्थ रॉय

मैंने इसकी कोशिश नहीं की, लेकिन मैं {{# इस के साथ .attr}} मान लेता हूंthisthis.[0]
फतिह एसेट

1

निम्न सिंटैक्स का उपयोग तब भी किया जा सकता है यदि सरणी का नाम नहीं है (बस सरणी को टेम्पलेट में पास किया गया है):

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

0

मेरे मामले में मैं एक कस्टम सहायक जैसे अंदर एक सरणी का उपयोग करना चाहता था,

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

जो काम नहीं किया, लेकिन @julesbou द्वारा सुझाए गए जवाब ने काम किया।

काम कोड:

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

उम्मीद है की यह मदद करेगा! चीयर्स।

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