2016-07-08 3 views
1

コレクションからオブジェクトを取得しようとすると問題が発生します。サブスクライブ機能は期待通りに機能しません。Meteor Subscribeはrouter.current()。paramsを使用していません。

クライアント::たとえば

JS

Template.Main.onCreated(function(){  
    var num = Router.current().params.taskid;  
    console.log(num); 
    this.subscribe('getTransaction',num); 
}); 

サーバー:それは私が何を表示することはできませんあるように私はこれを続けると

Meteor.publish('getTransaction', function(taskid){ 
    return Transactions.find({taskid:taskid}); 
}); 

、値が9であるコンソールに示しました。しかし、変数 "num"を明示的な値9に変更すると、期待通りに機能します。

サブスクリプションがこのケースでは機能しない理由は分かりますか?

本当にありがとうございます。

答えて

0

あなたの問題は、ルーターがテンプレートが作成された瞬間に「まだ準備ができていません」という事実かもしれないと思います。あなたは、ルートの特定のオプション(?私はあなたがアイアン・ルーターを使用していると思う)で、サブスクリプションを配置しました:

Router.route('/getTransaction/:_id', { 

    ...... 
    subscriptions: function() { 

     // add the subscription to the waitlist 
     this.subscribe('getTransaction', this.params._id).wait(); 
     }, 
    ................................. 
}); 

をあなたがここでより多くのオプションを見つけることができます。 http://iron-meteor.github.io/iron-router/#wait-and-ready

をそれは "しようと動作しない場合setTimeout()関数を使用してサブスクリプションを少し遅延させます。このように:

Meteor.setTimeout(function(){ 
    this.subscribe('getTransaction',num); 
}, 100); 
関連する問題