3

以下のようなtemplate/jsコンボを作成したいと思います。私が欲しいのは、「コレクション」テンプレートで2つの変数を使用できるようにすることです。

<template name="collection">
  Title: {{title}}
  <UL>
  {{#each items}}
    {{> item}}
  {{/each}}
  </UL>
</template>

<template name="collection_items"> 
  <LI>{{item_title}}</LI>
</template>

javascript関数は次のようになります。

Template.collection.data = function() {
  var record = Record.findOne({whatever:value});
  return { title: record.title, items: record.items }
}

Handlebarsの{{#withdata}}ヘルパーを使用して上記のようにオブジェクトを返そうとしましたが、テンプレートがクラッシュしました。次のような「トップレベル」関数を作成してみました。

Template.collection = function () {... }

しかし、それもテンプレートをクラッシュさせました。

私が避けようとしているのは、2つの別々の関数(1つはTemplate.collection.title、もう1つはTemplate collection.items)で、それぞれがRecordコレクションのfindOneを呼び出し、実際には同じテンプレートと1つの呼び出しで十分です。

何か案は?

4

3 に答える 3

3
Template.collection = function () {... }

Template.collectionは関数ではなく、インスタンスであり、したがってオブジェクトです。

Template.collectionコンソールに入力して重要なものを表示Template.collection.したり、オートコンプリートしてメソッドやフィールドを表示したりできます。


#withの例では、コメントで概説したように、Todoには実際にTodoが含まれていないようです。したがって、その使用例は次のとおりです。

https://github.com/meteor/meteor/blob/master/packages/templating/templating_tests.js#L75 https://github.com/meteor/meteor/blob/master/packages/templating/templating_tests.html#L92

これは、現在のマスターブランチと開発ブランチの両方で機能する、私が試した別の例です。

<head>
  <title>test</title>
</head>

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

<template name="hello">
  {{#with author}}
  <h2>By {{firstName}} {{lastName}}</h2>
  {{/with}}
</template>

そしてそのJSの部分:

if (Meteor.is_client) {
  Template.hello.author = function () {
    return {
      firstName: "Charles",
      lastName: "Jolley"
    };
  };
}
于 2012-07-08T21:57:14.157 に答える
0

2つの機能を避けたいと思っている具体的な理由は何ですか?

コードサンプルから、1つの問題があります。最初のテンプレートが次の行で2番目のテンプレートを呼び出しています。

{{> item}}

ただし、2番目のテンプレートは「アイテム」とは呼ばれません。2番目のテンプレートは次のように呼び出す必要があると思います。

<template name="item"> 

1番目と2番目のヘルパー関数を使用するのは簡単なようです。自分のコードで動作するようにはなりませんが、2番目のヘルパー関数は、参照しているコレクションを参照するために「this」規則を使用する必要があると思います。

乾杯-ホリング

于 2012-07-11T00:21:48.230 に答える
0

トムの答えは正しい。チャイムを鳴らして、私のシナリオで#withが失敗した理由を追加したいのは、流星の「反応性」の性質のために、モデルをロードする最初の呼び出しが「未定義」になり、それをチェックしなかったためです。 。ほんの少し後に、それは正常にロードされました。道徳は次のようなことをすることです

var record = Record.findOne({whatever:value})
if (record) {
  return record;
} else {
  // whatever
  return "loading"
}
于 2012-07-11T19:33:35.543 に答える