2012-05-04 6 views
22

この非常にシンプルな流星アプリは、読み込み時にTemplate is not definedエラーを投げています。このアプリケーションは、本質的には定型プロジェクト(meteor create)と同じです。ちょうどserver/client/publicディレクトリに分割されています。メテオで「テンプレートが定義されていません」という原因は何ですか?

Meteorは、グローバルTemplateオブジェクトが実際に準備される前に、Handlebars templateタグをレンダリングしようとしているようです。 JSコンソールにアクセスして "Template"と入力すると、そこにあります。

私は何か間違ったことをしたのですか、これはタイミングのバグでしょうか?

+0

このテンプレートはどこに使用していますか? meteor.jsを最初にロードする前にテンプレートをインクルードしようとしているようです。 – dwerner

+0

Meteorはバンドルを処理し、プロジェクト内のすべてのjsファイルを処理するため、meteor.jsの前にテンプレートを含めることはできません。もし私があなたを正しく理解していれば。いずれにしても、選択された回答は問題の内容を示します。 – mwcz

+1

'UI.registerHelper'を新しい' Template.registerHelper'に切り替えたときにこの問題が発生しました。廃止された 'UI'はサーバとクライアントの両方で定義されていましたが、' Template'はクライアントに対してのみ定義されていなければなりません。 –

答えて

9

フム、おそらくこれはあなたの問題を解決します:bodyタグは、テンプレート名ではなく、テンプレートが含まれていることを

注:

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

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

また、「.greetは」{{を指していることに注意してくださいgreet}}:

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

したがって、体内にテンプレートを置くことができないという問題がありました。代わりに、bodyは、上記のコードのように{{> hello}}でテンプレートを呼び出します。

+4

これは 'Meteor.isClient'で、' is_client'ではありません –

+0

私のために働いてくれてありがとう。 –

0

そうTemplateグローバルvarが」勝った、あなたはテンプレートがif (Meteor.isClient){}に包まれて呼び出すあなたの.jsファイルで確認する必要があります{{この}}

27

にデータを渡すためにTemplate.hello.thisを試してみてくださいなんらかの理由で利用可能になることがあります。

+2

この現象はなぜですか?別のクライアント/サーバーフォルダを使用する場合でもこのトリックが必要ですか? – Hamal000

+0

私は同じ位置にクライアントとサーバーの別々のフォルダにいました。私がこれをした後、エラーはなくなった。しかし、これが適切な解決策であるかどうかは100%確信していません。これを行う必要はありません。たぶん私の流星のサーバーが死亡したと私はブラウザのキャッシュを認識していないと、アプリがまだ実行されているように見えます。 – KJW

+0

これは私に起こったことですが、 'package.js'の' api.addFiles() 'に'、 "クライアント"を追加するのを忘れてしまいました。 –

0

これは初期化の問題です。私はMeteor 1.0を使用しており、 Meteor.startup(function() {}またはifブロックをMeteor.isClientに追加することで問題を解決しました。

クライアント:クライアントという名前の任意のディレクトリがサーバにロードされていない特殊なディレクトリ上のドキュメントは(今日のように)以下のように言うので

これは、バグかもしれません。 if(Meteor.isClient){...}にコードをラップするのと同様です。プロダクションモードでは、クライアントにロードされたすべてのファイルが自動的に連結され、縮小されます。開発モードでは、簡単にデバッグできるように、各ファイルが個別に送信されます。 MeteorアプリケーションのHTMLファイルは、サーバー側のフレームワークとは少し異なります。 Meteorはディレクトリ内のすべてのHTMLファイルをスキャンして、3つの最上位要素、すなわち<head><body>、および<template>を探します。ヘッドセクションとボディセクションは、個別のヘッドとボディに別々に連結され、最初のページロード時にクライアントに送信されます。

ただし、初期化を行わないと、「テンプレートが見つかりません」というエラーが表示されます。

5

パッケージで、これはあなたがあなたのAPIの使用リストにテンプレートを持っていることを確認した場合、すなわち

api.use(「テンプレート」、「クライアント」);

これは、Templateオブジェクトがインスタンス化された後にコードが実行されることを保証します。

+0

は受け入れる必要があります – ZuzEL

関連する問題