3

テンプレートを使用して Meteor で HTML タグ属性を生成していますが、壊れているようです。meteorの HTML タグ内にテンプレートを配置できません。その理由を知りたいです。

ルーティングにはmeteor-routerを使用しています。meteor は基本的に単一のレイアウトしか許可しないため、次のように、現在のビュー名を示すクラスを本文に追加したいと考えました。

/client/layout.html:

<head>
  <title>Meteor App</title>
</head>

<body {{> body-attributes}}>
  {{renderPage}}
</body>

<template name="body-attributes">data-view-name="{{page}}" class="{{page}}"<template>

/client/layout.js でこれを行うことができるように:

Template['body-attributes'].page = function () {
  return Meteor.Router.page();
};

しかし、それは機能しませんでした。アプリから、本文の属性がサポートされていないというエラーが表示されました。layout.html を次のように変更します。

<head>
  <title>Meteor App</title>
</head>

<body>
  <div {{> body-attributes}}>
      {{renderPage}}
  </div>
</body>

<template name="body-attributes">data-view-name="{{page}}" class="layout-container {{page}}"<template>

完全に壊れた HTML になりました。ブラウザーはページの前に「>」を表示し、コンソール要素パネルは次のようになります。 コンソールのスクリーンショット

なぜそれがうまくいかないのですか?

4

2 に答える 2

3

{{> body-attributes}}HTML タグ (あなたの場合は タグ) 内で呼び出すbodyことは、最終的に Meteor がDocumentFragmentをその場所の DOM に挿入することを意味します。

反応性のために、これらDocumentFragmentsはテンプレートのマークアップのバニラの複製ではなく、バックエンド エンジンがTemplate更新を維持するのに役立つ特別な Meteoresque 反応性タグでラップされています。_domFragこれは、テンプレート関数を呼び出して、次のように調べることで確認できます。

var _domFrag = Template.myTemplateName();

そのためTemplates、流星のコンテキストでは、タグ自体に追加のタグを挿入しているため、HTML タグの属性として埋め込むようには設計されていません。2 番目の試みは、フレームワークの動作に沿ったものです。

この動作の説明に役立つことを願っています。

于 2012-12-28T17:03:42.517 に答える
2

なぜ meteor が最上位の HTML タグ内のテンプレートを許可しないのかはわかりませんが、問題を回避する方法を見つけました。layout.html を次のように変更しました。

<head>
  <title>Meteor App</title>
</head>
<body>
  {{> global-layout}}
</body>

<template name="global-layout">
  <div data-view-name="{{page}}" class="global-container {{page}}">
    {{renderPage}}
  </div>
</template>

そして、layout.js で名前を からbody-attributesに切り替えました。global-layoutこれは完全に機能し、私の問題を解決しますが、最初のオプション (私の質問) が最初に機能しなかった理由を知りたいです。

于 2012-12-28T16:51:29.813 に答える