2016-05-23 15 views
1

フロー・ルーターを備えた流星アプリでは、ユーザー・データのフェッチに流星サブスクリプションを使用していますが、私のクライアントコードで私の出版物コードでフロー・ルーターを使用したテンプレート・ヘルパーのmeteor.userサブスクリプションへのアクセス

、私router.jsファイルで

Meteor.publish('fetchUserData', function(usrnm) { 
return Meteor.users.find({'username':usrnm}, { 
fields: { 
    profile: true, 
    services: true, 
    emails: true, 
    votedPatents: true, 
    userType: true, 
    followingUsers: true, 
    followedByUsers: true 
    } 
}); 
}); 

Subs = new SubsManager(); 
FlowRouter.route('/:username', { 
subscriptions: function(params) { 
    this.register('fetchUserData', Meteor.subscribe('fetchUserData', params.username)); 
}, 
action: function(params) { 
    BlazeLayout.render('main', {center: 'profile'}); 
    })  
} 
}); 

Template.profile.onCreated(function() { 
    this.autorun(function() { 
    var handle = Subs.subscribe('fetchUserData', username); 
    }) 
}) 


Template.profile.helpers({ 
    connections: function(){ 
    var u = Meteor.users.findOne({'username':username}); 
    return u; 
    } 
}) 

また、ヘルパー関数が未定義返すことに注意してくださいMeteor.user()以外のユーザーの場合はHow to access FlowRouter subscriptions in Meteor template helpers?も試してみましたが、その結果同じです

答えて

0

あなたの出版物は1人のユーザーを返します:ユーザー名はparamとして渡されますので、クライアントでは、このパブリケーションを購読すると1人のユーザーが得られます。あなたは

Meteor.users.find({....});

を行うと あなただけが公開一人のユーザーを持つコレクションを検索しています。

は、この問題を解決するには、次のものが必要です。

  • がクライアントにすべてのユーザーを公開する(セキュリティ上の理由のために理想的ではない、あなたがユーザーに署名見ることが許可されていることをユーザーにフィルタリングの世話をしない限り)

または

  • あなたが検索を実行する必要があるたびに、ルックアップするために、ユーザーとパブリケーションにサブスクライブ(findOne(そして、サブスクライブを実行) - >非効率的)

または

  • 皆を公開することなく、あなたが必要とするユーザーを返しますメソッドを使用します。
関連する問題