2012-11-11 19 views
6

नीचे दिया गया उदाहरण खिलाड़ियों के नामों की एक सूची उत्पन्न करेगा, जहां खिलाड़ी MongoDB डेटाबेस से डेटा सेट सेट करते हैं।क्या मेटर में संग्रह के माध्यम से सूचकांक प्राप्त करने का कोई तरीका है?

<template name="players"> 
    {{#each topScorers}} 
    <div>{{name}}</div> 
    {{/each}} 
</template> 

हालांकि, मैं एक पंक्ति में उनमें से चार प्रदर्शित करना चाहते हैं, और चार खिलाड़ियों छपा है के बाद, मैं <hr /> द्वारा लाइन विभाजित करने के लिए और उसके बाद जारी रखने के लिए चाहते हैं। उदाहरण के लिए,

<template name="players"> 
    {{#each topScorers}} 
    <div style="float:left;">{{name}}</div> 
    {{if index%4==0}} 
     <hr style="clear:both;" /> 
    {{/if} 
    {{/each}} 
</template> 

संग्रह के माध्यम से ऐसा करने के दौरान मैं ऐसा कुछ कैसे कर सकता हूं?

उत्तर

6

कोई आसान तरीका अभी ऐसा करने के लिए, हैंडल के नवीनतम संस्करण को एक @index क्षेत्र (जो आप क्या चाहते हैं करना होगा) का समर्थन करता है, लेकिन यह अभी तक उल्का के संस्करण में लागू नहीं किया है - https://github.com/meteor/meteor/issues/489

निश्चित रूप से आप अपने खुद के {{#each_with_index}} सहायक को लागू कर सकता है, यह कुछ इस तरह दिखेगा:

Handlebars.registerHelper('each_with_index', function(items, options) { 
    var out = ''; 
    for(var i=0, l=items.length; i<l; i++) { 
    var key = 'Branch-' + i; 
    out = out + Spark.labelBranch(key,function(){ 
     options.fn({data: items[i], index: i}); 
    }); 
    } 

    return out; 
}); 

इस का नकारात्मक पहलू आप उल्का के {{#each}} सहायक की सुंदरता है, जो न प्रतिक्रियात्मक रूप से फिर से प्रस्तुत करना है खोना है पूरी सूची जब एक आइटम बदलता है।

संपादित करें: धन्यवाद https://github.com/meteor/meteor/issues/281#issuecomment-13162687

7

एक अन्य समाधान के लिए सूचक के लिए @zorlak, संग्रह की प्रतिक्रिया को बनाए रखने के साथ लाइन में, map cursor function के साथ एक टेम्पलेट सहायक उपयोग करने के लिए है।

index.html: 

<template name="print_collection_indices"> 
    {{#each items}} 
    index: {{ this.index }} 
    {{/each}} 
</template> 

index.js: 

Items = new Meteor.Collection('items'); 

Template.print_collection_indices.items = function() { 
    var items = Items.find().map(function(doc, index, cursor) { 
    var i = _.extend(doc, {index: index}); 
    return i; 
    }); 
    return items; 
}; 
:

यहाँ दिखा जब एक संग्रह के साथ प्रत्येक का उपयोग कर कैसे सूचकांक वापस जाने के लिए एक उदाहरण है

संबंधित मुद्दे

 संबंधित मुद्दे