コレクションに対するデータベース クエリはクライアント上で既にリアクティブな変数であるため、以下は、テンプレートにネストされたネストされた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
お役に立てれば