この非常に単純なMeteorアプリは、ロード時にTemplate is not defined
エラーをスローします。このアプリは基本的にボイラープレートプロジェクト(meteor create
)と同じで、サーバー/クライアント/パブリックディレクトリに分割されています。
Meteorは、グローバルTemplateオブジェクトが実際に準備される前に、Handlebars template
タグをレンダリングしようとしているようです。 JSコンソールにアクセスして「テンプレート」と入力できるようになるまでに、そこにあります。
私は何か間違ったことをしましたか、それともこれはタイミングのバグですか?
うーん、おそらくこれはあなたの問題を解決するでしょう:
Bodyタグにはテンプレート名が含まれていますが、テンプレートは含まれていないことに注意してください。
<body>
{{> hello}}
</body>
<template name="hello">
{{greet}}
</template>
また、「。greet」は{{greet}}を指すことに注意してください。
if (Meteor.isClient) {
Template.hello.greet = function () {
return "Hey!";
};
}
そのため、問題は、ボディ内にテンプレートを含めることができないということでした。代わりに、本文は上記のコードのように{{> hello}}を使用してテンプレートを呼び出します。
テンプレートを呼び出す.jsファイルがif (Meteor.isClient){}
でラップされていることを確認する必要があります。そうしないと、何らかの理由でTemplate
グローバル変数が使用できなくなります。
これがパッケージに含まれている場合は、API使用リストでテンプレートを作成していることを確認してください。
api.use( 'テンプレート'、 'クライアント');
これにより、Templateオブジェクトがインスタンス化されると、コードが確実に実行されます。
これは初期化の問題です。 Meteor 1.0を使用しており、Meteor.startup(function () {}
またはif
ブロックをMeteor.isClient
に追加することで問題を解決しました。
特別なディレクトリのドキュメントには以下のように記載されているため、これはバグである可能性があります(本日現在)。
クライアント:clientという名前のディレクトリはサーバーにロードされません。 if(Meteor.isClient){...}でコードをラップするのと似ています。クライアントにロードされたすべてのファイルは、本番モードのときに自動的に連結および縮小されます。開発モードでは、デバッグを容易にするために、各ファイルが個別に送信されます。 MeteorアプリケーションのHTMLファイルは、サーバー側のフレームワークとはかなり異なる方法で処理されます。 Meteorは、ディレクトリ内のすべてのHTMLファイルをスキャンして、
<head>
、<body>
、および<template>
の3つのトップレベル要素を探します。ヘッドセクションとボディセクションは別々に連結されて単一のヘッドとボディになり、最初のページの読み込み時にクライアントに送信されます。
しかし、初期化しないと、これは「テンプレートが見つかりませんエラー」で失敗します。
Template.hello.thisを試して、データを{{this}}に渡します