2012-05-04 30 views
22

यह बेहद सरल उल्का ऐप लोड पर Template is not defined त्रुटि फेंक रहा है। ऐप अनिवार्य रूप से बॉयलरप्लेट प्रोजेक्ट (meteor create) के समान है, बस सर्वर/क्लाइंट/सार्वजनिक निर्देशिका में विभाजित है।उल्का में "टेम्पलेट परिभाषित नहीं किया गया" क्या कारण है?

उल्का वैश्विक टेम्पलेट ऑब्जेक्ट वास्तव में तैयार होने से पहले हैंडलर template टैग प्रस्तुत करने की कोशिश कर रहा है। जब तक मैं जेएस कंसोल पर जा सकता हूं और "टेम्पलेट" टाइप कर सकता हूं, यह वहां है।

क्या मैंने कुछ गलत किया है, या यह एक समय बग है?

ध्यान दें कि शरीर टैग टेम्पलेट का नाम नहीं बल्कि टेम्पलेट शामिल:

+0

आप इस टेम्पलेट को उपयोग के लिए कहां शामिल कर रहे हैं? ऐसा लगता है कि आप पहले लोड होने से पहले टेम्पलेट को शामिल करने का प्रयास कर रहे हैं meteor.js – dwerner

+0

उल्का संभालती है और आपके प्रोजेक्ट में सभी जेएस फाइलों को शामिल करती है, इसलिए meteor.js से पहले टेम्पलेट को शामिल करना संभव नहीं है।अगर मैं आपको सही समझ रहा हूँ। किसी भी तरह से, चयनित उत्तर दिखाता है कि समस्या क्या थी। – mwcz

+1

जब मैंने 'UI.registerHelper' को नए' Template.registerHelper' पर स्विच किया, तो मुझे यह समस्या मिली। यह होना चाहिए कि बहिष्कृत 'यूआई' सर्वर और क्लाइंट दोनों के लिए परिभाषित किया गया था लेकिन 'टेम्पलेट' केवल क्लाइंट के लिए परिभाषित किया गया है। –

उत्तर

9

हम्म, शायद इससे आपकी समस्या का समाधान होगा

<body> 
    {{> hello}} 
</body> 

<template name="hello"> 
    {{greet}} 
</template> 

इसके अलावा, ध्यान दें कि ".greet" का संदर्भ {{ बधाई}}:

if (Meteor.isClient) { 
    Template.hello.greet = function() { 
    return "Hey!"; 
    }; 
} 

तो, मुद्दा यह था कि आपके शरीर में एक टेम्पलेट नहीं हो सकता है। इसके बजाए, उपरोक्त कोड में शरीर {{> हैलो}} के साथ टेम्पलेट को कॉल करता है।

+4

अब यह 'Meteor.isClient' है और 'is_client' –

+0

धन्यवाद, यह मेरे लिए काम कर रहा है। –

27

आप जो कहता है खाका if (Meteor.isClient){} में लपेटा जाता है अपने .js फ़ाइल में सुनिश्चित करने की आवश्यकता है, अन्यथा Template वैश्विक वर जीता 'डेटा पास करने के Template.hello.this प्रयास करें कुछ कारणों से उपलब्ध नहीं है।

+2

यह व्यवहार क्यों? क्या मुझे इस चाल की आवश्यकता है भले ही मैं अलग-अलग क्लाइंट/सर्वर फ़ोल्डरों का उपयोग करता हूं? – Hamal000

+0

मैं क्लाइंट और सर्वर के लिए अलग-अलग फ़ोल्डर्स में एक ही स्थिति में था। ऐसा करने के बाद, त्रुटि चली गयी। लेकिन मुझे 100% यकीन नहीं है कि यह उचित समाधान है या नहीं। आपको ऐसा करने की आवश्यकता नहीं है। हो सकता है कि मेरा उल्का सर्वर मर गया और मुझे पता नहीं था कि ब्राउज़र कैश और ऐसा लगता है कि ऐप अभी भी चलता है। – KJW

+0

यह मेरे साथ हुआ, 'package.js' में 'api.addFiles()' में 'क्लाइंट" 'जोड़ने के लिए भूल गया। –

0

यह प्रारंभिक समस्या है। मैं उल्का 1.0 का उपयोग कर रहा हूं और मैंने Meteor.startup(function() {} या if ब्लॉक को Meteor.isClient पर जोड़कर समस्या हल की।

यह एक बग हो सकता है क्योंकि विशेष निर्देशिकाओं पर प्रलेखन (आज तक) नीचे के रूप में कहते हैं:

ग्राहक: किसी भी नामी निर्देशिका क्लाइंट सर्वर पर लोड नहीं है। यदि आपका कोड लपेटने के समान है (Meteor.isClient) {...}। क्लाइंट पर लोड की गई सभी फ़ाइलों को स्वचालित रूप से संयोजित और उत्पादन मोड में कम किया जाता है। विकास मोड में, प्रत्येक फ़ाइल को आसानी से डिबगिंग के लिए व्यक्तिगत रूप से भेजा जाता है। एक उल्का अनुप्रयोग में एचटीएमएल फाइलों को सर्वर-साइड फ्रेमवर्क से थोड़ा अलग तरीके से इलाज किया जाता है। उल्का तीन शीर्ष-स्तरीय तत्वों के लिए आपकी निर्देशिका में सभी HTML फ़ाइलों को स्कैन करता है: <head>, <body>, और <template>। सिर और शरीर के खंड अलग-अलग एक सिर और शरीर में संयोजित होते हैं, जो प्रारंभिक पृष्ठ लोड पर क्लाइंट को प्रेषित होते हैं।

लेकिन शुरुआत के बिना, यह "टेम्पलेट त्रुटि नहीं मिली" के साथ विफल रहता है।

5

एक पैकेज में इस करें कि आप अपने API उपयोग सूची में templating है करते हैं यानी

api.use ('templating', 'ग्राहक');

यह सुनिश्चित करता है कि टेम्पलेट ऑब्जेक्ट को तुरंत चालू करने के बाद आपका कोड चलाया जाए।

+0

उत्तर स्वीकार किया जाना चाहिए – ZuzEL

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