3

このドキュメントに基づいてリアクティブテンプレートをレンダリングしたい:

Sprint: 
    WorkStories:
        Tasks

これは、「レベル」ごとにMeteorコレクションを作成することで実行できることはわかっていますが、これは、結果が実際には個別のドキュメントとしてデータベースに保存されていることを意味します。のコレクション/ドキュメントを1つ持つことが可能かどうかを知りたいのですがSprint、これにはWorkStories、の標準コレクションとTasksそれぞれの標準コレクションがあり、リアクティブテンプレートにレンダリングされます。

[Meteor.deps.Context] [1]を見たことがありますが、それを接続する方法がわかりません(または、適切なツールであっても)。どの例もこのようなことはしません。

[この質問][2]も見ましたが、彼は、単一のドキュメントをレンダリングするのではなく、関連しているが別個のドキュメントを接続することについて質問しているようです。

4

1 に答える 1

3

コレクションに対するデータベース クエリはクライアント上で既にリアクティブな変数であるため、以下は、テンプレートにネストされたネストされた1 つの Sprintドキュメントをレンダリングします。 WorkStories Tasks

HTML:

<head>
    <title>Sprints Example</title>
</head>

<body>
    {{> sprints }}
</body>

<template name="sprints">
  {{#each items}}
    <div>Name: {{name}}</div>
        {{#each this.WorkStories}}
            <div>{{name}}</div>
            {{#each this.Tasks}}
                <div>{{name}}</div>
            {{/each}}
        {{/each}}
  {{/each}}
</template>

Javascript:

Sprints = new Meteor.Collection("sprints");

if (Meteor.isClient) {
    Template.sprints.items = function () {
      return Sprints.find({});
  };
}

if (Meteor.isServer) {
    Meteor.startup(function () {
        if (Sprints.find().count() === 0) {
            Sprints.insert({ name: 'sprint1', WorkStories: [{ name: 'workStory1', Tasks: [{ name: 'task1' }, { name: 'task2' }, { name: 'task3' }] }, { name: 'workStory2', Tasks: [{ name: 'task1' }, { name: 'task2' }, { name: 'task3' }] }] });
        }
  });
}

回答付きで更新

以下の@Paul-Youngのコメントによると、私の使用に関する問題は$set、更新に引用符がないことでした。ネストされたオブジェクトが でレンダリングさTemplateれると、Meteor 0.5.3 以降、サブ配列を簡単に更新できます。

Sprints.update(Sprints.findOne()._id, { $set: { "WorkStories.0.name": "updated_name1" } });

背景情報

これにより初期オブジェクトがロードされますが、更新に問題があるようです。コンソールで以下を呼び出して、テンプレートを再レンダリングすることができました。

Sprints.update(Sprints.findOne()._id, { name: 'sprint777', WorkStories: [{ name: 'workStory1232', Tasks: [{ name: 'task221' }, { name: 'task2' }, { name: 'task3' }] }, { name: 'workStory2', Tasks: [{ name: 'task1' }, { name: 'task2' }, { name: 'task3' }] }] })

Meteor Docsに従って、これらのルールに従います。

ただし、修飾子に $ 演算子が含まれていない場合は、代わりにリテラル ドキュメントとして解釈され、以前にデータベースにあったものを完全に置き換えます。(リテラル ドキュメント修飾子は、現在、検証済みの更新ではサポートされていません。

もちろん、$setネストされたドキュメントでスタイル オペレータを使用し、ネストされたプロパティが変更されたときに、テーブル内のドキュメント全体を置き換えることなく、テンプレートが再レンダリングされるようにする必要があります。Meteor の 0.5.3 バージョンには、サブ配列を検索する機能が含まれていました。

Allow querying specific array elements (foo.1.bar).

サブ配列検索を試みましたが、元のエンティティ.のサブドキュメントをまだ更新できていないため、Google トークに質問を投稿しました。WorkStories

お役に立てれば

于 2013-01-08T19:07:08.567 に答える