2017-07-06 4 views
0

dataをテンプレートに返す前に、特定のルートをロードするサブスクリプションを待つことに本当に苦労しています。私は、文書が見つかったことをサーバー上の公開から見ることができますが、クライアントには文書はありません。Meteor Iron Router WaitOnサブスクリプション

パブリッシュ時にfind()。count()を実行すると、1つのドキュメントが見つかったことを示していますが、サブスクリプションでカウントすると0個のドキュメントが表示されます。

サブスクリプションを使用するなど、さまざまな方法を試しました。waitOn:function()ではなくfunction()ですが、何も機能しません。

Collections.js libに:

SinglePackage = new Mongo.Collection("SinglePackage"); 
SinglePackage.allow({ 
    insert: function(){ 
    return true; 
    }, 
    update: function(){ 
    return true; 
    }, 
    remove: function(){ 
    return true; 
    } 
}); 

Publications.jsサーバー:

Meteor.publish("SinglePackage", function(pack_id) { 
return Packages.find({shortId: pack_id}); 
}); 

アイアンルータ:

Router.route('/package/:id', { 
    name: 'package.show', 
    template: 'Package_page', 
    layoutTemplate: 'Landing_layout', 
    waitOn: function() { 
    return Meteor.subscribe('SinglePackage', this.params.id); 
    }, 
    data: function() { 
    return SinglePackage.find(); 
    }, 
    action: function() { 
    if (this.ready()) { 
     this.render(); 
    } else { 
     this.render('Loading'); 
    } 
    } 
}); 

は、私は非常に間違って何かをやっている、またはこれだけです達成するために複雑なもの? waitOnは、サブスクリプションが準備完了するまで関数の残りの部分を待機させると考えられます。

ご協力いただければ幸いです。

答えて

0

サブスクリプションの準備が整う前にdata関数が実行されているようです。サブスクリプションの準備が完了した後にdata関数が実行されたとしても、ここでpub/subを無意味にレンダリングする反応的なデータソースではありません。 Here's a great article on reactive data sources。あなたが今することができ、あなたのtemplate.htmlで

Template.Package_page.helpers({ 
    singlePackage() { 
    // This is now a reactive data source and will automatically update whenever SinglePackage changes in Mongo. 
    return Package.find().fetch(); 
    } 
}); 

:あなたのtemplate.jsで次に

Router.route('/package/:id', { 
    subscriptions: function() { 
    // returning a subscription handle or an array of subscription handles 
    // adds them to the wait list. 
    return Meteor.subscribe('SinglePackage', this.params.id); 
    }, 

    action: function() { 
    if (this.ready()) { 
     this.render(); 
    } else { 
     this.render('Loading'); 
    } 
    } 
}); 

:サブスクリプションのIron Router Docsからの例を参照すると

、あなたはこのような何かをするだろうsinglePackage

<template name="Package_page"> 
    {#with singlePackage} <!-- Use #each if you're singlePackage is an array --> 
    ID: {_id} 
    {/with} 
</template> 
+0

ヘルプJeremiahに感謝します。私はこれを試しましたが、うーん、それはまだ動作していません。テンプレートレベルでカウントすると、結果は0に戻ります – PsydeStep

+0

ワークフローのどの時点でカウントしていますか? onCreated、onRendered、helper? – Jeremiah

+0

ヘルパー..それは間違った場所ですか?本当に奇妙なことですが、私はサブスクリプションではなく、公開している文書を見ることができます – PsydeStep

関連する問題