2013-05-28 8 views
20

मेरे पास एक सहायक है जिसे printArray कहा जाता है जो कि प्रत्येक आइटम को सरणी में प्रिंट करता है। जब मैं जेएस में सरणी को परिभाषित करता हूं और इसे संदर्भ वस्तु के माध्यम से सहायक में पास करता हूं तो यह बहुत अच्छा काम करता है। मुझे क्या करना चाहते हैं की तरह, सही टेम्पलेट में सरणी को परिभाषित है:उल्का/हैंडलबार में टेम्पलेट में लिखे गए पास सरणी

{{printArray arr=[1, 3, 4] }} 

दुर्भाग्य से, समय इस undefined करने के लिए अपने सहायक को हो जाता है, arr महत्वपूर्ण बिंदुओं से। क्या जावास्क्रिप्ट में इसे परिभाषित किए बिना मेरे सहायक के अंदर सरणी प्राप्त करने के लिए कोई वैध वाक्यविन्यास है?

उत्तर

2

आप आप के रूप में नीचे एक सरणी सहायक परिभाषित कर सकते हैं एक और सहायक कि एक सरणी

Template.ArrayDemo.helpers({ 
    arrayValues: [1, 2, 3], 
    printArray: function(arr) { 
     for (i = 0; i < arr.length; i++) { 
      console.log(arr[i]); 
     } 
    } 
}); 

रिटर्न उपयोग करने की आवश्यकता अब आप

{{printArray arr=arrayValues}}

1

क्या आपने सरणी के केवल ब्रैकेट किए गए मान में गुजरने का प्रयास किया है?

{{printArray [1, 3, 4]}} 

मैं जानता हूँ कि आप आसानी से वस्तुओं में पारित कर सकते हैं हैंडल सहायक तरीकों के तर्क के रूप में,:

{{printArray {arr: [1, 3, 4]} }} 

इन भयानक सहायक तरीकों पर एक नजर डालें, सबसे जिनमें से मैं कहीं से चुरा लिया, कुछ जिनमें से मैंने लिखा या बदलाव ... वे मेरे विषय पर संदर्भ प्रारंभिक बिंदु इस प्रकार हैं:

https://github.com/zeroasterisk/Presenteract/blob/master/client/lib/handlebar-helpers.js

+2

ये भयानक लग रही है, लेकिन मैं कुछ गलत समझ जाना चाहिए - मैं 'पाने की उम्मीद 'बंद करें', 'डेटा', 'STRING', 'पूर्णांक', 'बूलियन', 'आईडी', 'सितम्बर', मिल गया वस्तु के उद्घाटन घुंघराले ब्रेस पर 'INVALID'। क्या इस वाक्यविन्यास को सादे हैंडलबार्स में अनुमति दी जा सकती है लेकिन उल्का में अस्वीकृत किया जा सकता है? –

+0

आपके कोड के लिंक के लिए धन्यवाद। क्या आप बता सकते हैं कि आप इन सहायकों को _using_ कहां कर रहे हैं? –

+0

यहां 'getSession' का एक उदाहरण है https://github.com/zeroasterisk/Presenteract/blob/master/client/views/about.html#L68 – zeroasterisk

6

आप जावास्क्रिप्ट केउपयोग कर सकते हैं इस तरह कुछ हासिल करने के लिएसरणी। arguments सरणी आपको फ़ंक्शन में भेजे गए प्रत्येक मान तक पहुंच प्रदान करती है जब इसे कहा जाता है।

यह आप इस तरह सिंटैक्स का उपयोग करने की अनुमति देगा:

{{printArray 1 3 4}} 

कोड इस तरह दिखता है:

Handlebars.registerHelper('printArray', function() { 
    //Last argument is the options object. 
    var options = arguments[arguments.length - 1]; 

    //Skip the last argument. 
    for(var i = 0; i < arguments.length - 1; ++i) { 
     //Do your thing with each array element. 
    } 

    //Return your results... 
    return ''; 
}); 
2

आप लगभग eval() के उपयोग के साथ ऐसा कर सकते हैं, इस तरह एक सहायक का उपयोग कर :

Handlebars.registerHelper('printArray', function(values) { 
    var array = eval(values); 

    if (array.constructor === Array()) { 
    ... 
    } 
} 

उपर्युक्त आपको इसे टेम्पलेट से कॉल करने की अनुमति देता है:

{{printArray '[0, 1, 2]'}} 

इस विधि के लिए एक चेतावनी यह है कि आपको अपनी सरणी को स्ट्रिंग के रूप में पास करना होगा।

1

कर सकते हैं।

Handlebars.registerHelper('array', function() { 
    return Array.prototype.slice.call(arguments, 0, -1); 
} 

{{printArray (array 1 3 4)}} 
संबंधित मुद्दे