2014-09-04 12 views
5

मैं उल्का सीखने की कोशिश कर रहा हूं और कुछ बाधाओं में भाग रहा हूं। मैं एक जोड़ी नेस्ट टेम्पलेट्स मेरे एप्लिकेशन में उपयोगकर्ता जानकारी के सभी प्रदर्शित करने के लिए:सरणी में उल्का उपयोगकर्ता गुणों का उपयोग कैसे करें?

users_list.html:

<template name='usersList'> 
    <div class='users'> 
    {{#each user}} 
     {{> userItem}} 
    {{/each}} 
    </div> 
</template> 

और user_item.html:

<template name='userItem'> 
    <div class='user'> 
    <div class='user-content'> 
     <h3>User:</h3> 
     <h4>Email: {{emails}}</h4> 
      <h5>ID: {{_id}}</h5> 
      ... 
    </div> 
    </div> 
</template> 

और संबंधित टेम्प्लेट सहायक:

Template.usersList.helpers({ 
    user: function(){ 
    return Meteor.users.find().fetch(); 
    } 
}); 

यह शीर्ष स्तर की संपत्तियों के लिए काम करता है, लेकिन यदि मैं स्पष्ट रूप से .addres तक पहुंचने का प्रयास करता हूं पर ईमेल सरणी में 0 सूचकांक रों संपत्ति user_item.html में ऊपर लाइन बदलकर:

<h4>Email: {{emails[0].address}}</h4> 

उल्का शिकायत:

Exception in queued task: Error: Can't call non-function: [object Object]...

यह मेरे लिए भ्रामक है क्योंकि मैं कंसोल में ऐसा कर सकते हैं :

var userz = Meteor.users.find().fetch(); 
userz[0].emails[0].address // "[email protected]" 

मेटीर को यह क्यों पसंद नहीं है इस पर कोई विचार?

इसके अलावा, मैं सामान्य रूप से सोच रहा था कि मुझे ईमेल सरणी की सामग्री को एक चर में संग्रहीत करने की आवश्यकता हो सकती है और user_item टेम्पलेट में ईमेल_लिस्ट और ईमेल_इटम टेम्पलेट को घोंसले के अलावा उपरोक्त समान पैटर्न दोहराया जा सकता है। यह इस उपयोग के मामले के लिए व्यावहारिक लेकिन अत्यधिक जटिल लगता है।

आखिरकार, मैं वास्तव में संग्रह में दस्तावेजों के नेस्टेड विशेषताओं तक पहुंचने और प्रदर्शित करने के लिए उचित पैटर्न सीखने और कार्यान्वित करने की कोशिश कर रहा हूं। किसी भी विचार या मार्गदर्शन की सराहना की जाएगी।

उत्तर

6

यह आपके वाक्य रचना के साथ सिर्फ एक समस्या है, इस प्रयास करें:

<h4>Email : {{emails.[0].address}}</h4> 

आप डॉट सिंटैक्स का उपयोग ईमेल सरणी के पहले तत्व (एक संपत्ति जो कुंजी है "0") का उपयोग करने की जरूरत है।

https://github.com/meteor/meteor/wiki/Using-Blaze#dotted-helpers-with-numeric-indices

तुम भी ईमेल की एक सूची प्रदर्शित करने के लिए इस पद्धति का उपयोग कर सकता:

(from userItem) 
{{> emailsList}} 

<template name="emailsList"> 
    <ul> 
    {{#each emails}} 
     {{> emailItem}} 
    {{/each}} 
    </ul> 
</template> 

<template name="emailItem"> 
    <li>Address : {{address}}</li> 
</template> 

मुझे नहीं लगता कि यह बहुत ज्यादा जटिल है (बस कुछ और टेम्पलेट्स), और उल्का इस के साथ करना बहुत आसान है। जब भी उचित हो, अपने टेम्पलेट्स को अधिक उप-टेम्पलेट्स में स्लाइस करें, यह डेटा अमान्यता पर डीओएम पुनर्वितरण को सरल और गति देगा।

इसके अलावा, आपको एक सहायक में कर्सर लौटने पर लाने का उपयोग करने की आवश्यकता नहीं है: #each ब्लॉक को सरणी के बजाय सीधे कर्सर के साथ काम करने के लिए अनुकूलित किया गया है। (यह पूरी सूची के बजाय केवल एक संशोधित आइटम को पुनः प्रस्तुत करने के लिए पर्याप्त स्मार्ट होगा)।

+0

इस उल्का में काम करता है, धन्यवाद। हालांकि, यह कोड कंसोल में काम नहीं करता है। क्या आज मेरी जावास्क्रिप्ट बंद है? मुझे नहीं मिल रहा है हमें क्यों चाहिए। ईमेल सरणी के 0 इंडेक्स पर आइटम पर जाने के लिए नोटेशन। – Chris

+0

ऐसा इसलिए है क्योंकि स्पेसबार (हैंडलबार्स का उल्का कार्यान्वयन) जावास्क्रिप्ट से कुछ अलग है, आपका वाक्यविन्यास जेएस के लिए ठीक था लेकिन टेम्पलेट इंजन के लिए गलत था। – saimeunt

+0

@walter मेरी समस्याओं के स्रोत से जुड़ा हुआ है। सहायता के लिए धन्यवाद – Chris

1

आप के प्रलेखन ब्लेज़

जाँच करने के लिए टेम्पलेट में उस शो सरणी के लिए, आप शो की तरह प्रलेखन लिखने के लिए करना चाहिए कर सकते हैं,

बिंदीदार सहायकों में, संख्यात्मक सूचकांक, जैसे आसपास उपयोग कोष्ठक {{ currentUser.emails। [0] .address}} के बजाय {{currentUser.emails.0.address}}

Good {{currentUser.emails.[0].address}}


Bad {{currentUser.emails.0.address}}

विकी

https://github.com/meteor/meteor/wiki/Using-Blaze

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