3

私は2つのコレクションを持っています:

Contracts = new Mongo.Collection('contracts');
Reminders = new Mongo.Collection('reminders');

これらはデータベース内で多かれ少なかれ次のように構造化されています。

契約:

{
  "id": "4432234",
  "contract": "C-42432432",
  "description": "Description of contract",
  "counterpart": "Company name",
  "status": "awarded"
},
etc.

リマインダー:

{
  "name": "Contract expiring",
  "type": "expiring",
  "contract": "C-42432432",
  "reminderDate": "2015-06-01",
  "urgency": 3
},
etc.

ここでの「契約」名は、契約コレクション内の「契約」名を参照しています。同じ契約に複数のリマインダーを関連付けることができます。したがって、私はそれらを 2 つの異なるコレクションに入れたいと考えています。

私が使用する契約データを取得するには:

<template name="example">
{{#each contracts}}
    {{description}}
{{/each}}
</template>

対応するjs:

Template.example.helpers({
  contracts: function() {
    return Contracts.find();
  }
});

これは問題なく動作し、このインスタンスの結果は ですDescription of contract

しかし、reminder-collection を表示して、Contract-collection から対応するデータを取得したい場合はどうすればよいでしょうか? つまり、reminder-collection をループして同じ出力を得たいと考えています。

<template name="notworking">
{{#each reminder}}
    {{description}}
    <!-- Here I want the description from the Contract-collection -->
{{/each}}
</template>

対応するjs:

Template.notworking.helpers({
  reminder: function() {
    //?
  }
});
4

3 に答える 3

1

各コントラクトを反復するループ内の各リマインダーをループする必要があると仮定しています:

<template name="contracts">
  {{#each contracts}}
    <p>{{description}}</p>
    {{#each reminders}}
      <p>{{description}}</p>
    {{/each}}
  {{/each}}
</template>

を評価するときの現在のデータ コンテキストremindersは、現在反復処理されているコントラクトになるため、 を使用してそのコントラクト名にアクセスできますthis.contract

その結果、同じ契約名を持つすべてのリマインダー ドキュメントを返すだけで済みます。

Template.contracts.helpers({
  reminders: function(){
    return Reminders.find({
      contract: this.contract
    });
  }
});
于 2015-06-15T20:27:32.383 に答える