0

背景: Meteor.js を使用して、ユーザーが自分のプロファイルにボード ゲームを追加できる Web アプリケーションを作成します。ユーザー コレクションとゲーム コレクションがあります。

ゲームのリストがあり、各ゲームの横にボタンがあり、ユーザーはゲームを自分のプロファイルに追加できます。ボタンは各ゲームの _id を見つけて、それを user.games 配列に追加します。_id は非常に長いハッシュです。

ユーザーのダッシュボードで、ユーザーが「サブスクライブ」した各ゲームを表示できるようにしたいのですが、user.games フィールドにアクセスする方法がわかりません。

これが私のコードです:

/server/publications.js

Meteor.publish('userGames', function () {
  return Meteor.users.find({_id: this.userId},
                           {fields: {'games': 1}});
});

/client/main.js

Meteor.subscribe('userGames');

/client/views/dashboard/dashboard.html

<template name="dashboard">
<div class="dashboard">
    {{#if hasGames}}
        <ul class="games-list">
            {{#each userGames}}
                {{> game}}
            {{/each}}
        </ul>
    {{else}}
        <h3>You have not added any games to your chest</h3>
    {{/if}}
</div>
</template>

/client/views/dashboard/dashboard.js

Template.dashboard.helpers({
    hasGames: function(){

    },
    userGames: function(){

    }
});

ご覧のとおり、user.games フィールドにアクセスできるようにするために、dashboard.js ヘルパー関数に何が入っているのかわかりません。

編集:

そこで、以下の回答が機能するかどうかを確認するためにテストを実行しました - 以下を更新しました:

ダッシュボード.html

<template name="dashboard">
    <div class="dashboard">
        {{test}}
    </div>
</template>

ダッシュボード.js

Template.dashboard.helpers({
    test: function(){
        var user = Meteor.user();
        return Games.find({_id: { $in: user.games  }});
    }
});

コンソールに「Uncaught TypeError: Undefined のプロパティ 'games' を読み取れません」と表示されます

4

1 に答える 1

2

現在ログインしているユーザーのすべてのゲームを見つける

Games = new Meteor.Collection("userGames");

if (Meteor.isClient) {
  Meteor.subscribe('userGames');

  Template.hello.greeting = function () {
        var user = Meteor.user();

        if(user && Array.isArray(user.games)){
          return Games.find({_id: { $in: user.games }}).fetch();
        }else{
          return [];
        }

  };
}

if (Meteor.isServer) {

  Meteor.publish('userGames', function () {
    return Meteor.users.find({_id: this.userId},
                           {fields: {'games': 1}});
  });
}
于 2013-07-03T10:33:25.637 に答える