22

Template is not definedこの非常にシンプルなMeteorアプリは、読み込み時にエラーをスローします。このアプリは基本的にボイラープレートプロジェクト(meteor create)と同じですが、サーバー/クライアント/パブリックディレクトリに分割されています。

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

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

4

5 に答える 5

27

テンプレートを呼び出す .js ファイルが でラップされていることを確認する必要がありますif (Meteor.isClient){}。そうしTemplateないと、何らかの理由でグローバル変数が使用できなくなります。

于 2013-07-25T20:38:39.210 に答える
9

うーん、おそらくこれで問題が解決するでしょう:

body タグにはテンプレート名は含まれますが、テンプレートは含まれないことに注意してください。

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

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

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

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

そのため、本文内にテンプレートを含めることができないという問題がありました。代わりに、本文は上記のコードのように {{> hello}} でテンプレートを呼び出します。

于 2012-05-04T04:06:46.220 に答える
5

これがパッケージ内にある場合は、API 使用リストにテンプレートがあることを確認してください。

api.use('テンプレート', 'クライアント');

これにより、テンプレート オブジェクトがインスタンス化されるとコードが実行されます。

于 2015-02-24T23:12:51.663 に答える
0

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

特別なディレクトリに関するドキュメントには以下のように記載されているため (今日の時点で)、これはバグである可能性があります。

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

ただし、初期化しないと、「テンプレートが見つからないというエラー」で失敗します。

于 2014-11-16T16:51:10.033 に答える
0

Template.hello.this を試して、データを {{this}} に渡します

于 2012-05-04T04:11:52.870 に答える