1

私は meteor を使用していますが、ドキュメントの公開/購読と、handlebars#each itemsヘルパーを使用したクライアントへのコレクションのクエリ/返却との関係について少し混乱しています。

特定のドキュメントを公開して購読することにより、状況が変化したときにクライアント側のブラウザーで反応的な更新が行われることを理解しています。

私は自分で非常に複雑な (役割指向の) 公開関数を作成し、アイテムをクライアントに返すのと同等の関数を作成していることに気づきました。例えば、

Meteor.publish("directory", function () {
    var user = Meteor.users.findOne({_id:this.userId});
    //role and logic left out on purpose
    return Meteor.users.find({}, {fields:{emails:1, profile:1}});
});

そしてサブスクライブ

if (Meteor.userId() != null) {
    Meteor.subscribe("directory");
}

テンプレートは show people と呼ばれ、ヘルパーは「users」です

 Template.show_people.users = function () {
     users = Meteor.users.find({}).fetch();
     return users;
 };

私の質問は、物事はこのように行われるべきですか?. パブリッシュに使用したのと同じクエリをリスト ヘルパーに返しますか?

4

1 に答える 1

1

#each Handlebars 関数にクエリ カーソルを与えることができます。というか、オススメです。このようにして、DOM のスマートな更新が行われます。ドキュメントが Cursor に追加されると、Handlebars はそのドキュメントの新しい DOM ノードのみを作成し、既に存在していたドキュメントの DOM ノードを再作成しません。これは、配列を提供する場合には当てはまりません。

したがって、コードの 3 番目の部分は次のようになります。

Template.show_people.users = function () {
     return Meteor.users.find({});
};

また、クライアント側で行われるcollection.find()は、miniMongo ストレージ内のドキュメントのみを検索することに注意してください...サーバー データベース全体を検索するのではなく、サーバーが公開したドキュメントのみを検索します。あなた。

そのため、複雑なロール指向のロジックは Meteor.publish() 関数内でのみ必要です。

于 2013-04-03T01:00:52.527 に答える