2016-04-28 18 views
4

コレクションを除いて、hereの輪郭を描いたパターンで、「テンプレートヘルパーでMeteorメソッドの戻り値を使用する」の手順を実行しようとしています。流星法の結果としてcollection.findを使用するにはどうすればよいですか?

基本的に、私はこの進行中のようなものを持っている:

(サーバ側)

Meteor.methods({ 
    queryTest: function(selector) { 
     console.log("In server meteor method..."); 
     return MyCollection.find(selector); 
    } 
}); 

(クライアント側)

Meteor.call('queryTest', {}, function(error, results) { 
    console.log("in queryTest client callback..."); 

    queryResult = []; 
    results.forEach(function(result) { 
     // massage it into something more useful for display 
     // and append it to queryResult... 
    }); 

    Session.set("query-result", queryResult); 
}); 

Template.query_test_template.helpers({ 
    query_test_result: function() { 
     return Session.get("query-result"); 
    } 
}); 

問題は、私のコールバックです(メテオから.call)は呼び出されません。

私はメソッドを 'return "foo"'に置き換えると、コールバックが呼び出されます。また、 ".fetch()"を検索に追加すると、それも表示されます(ただし、反応がなくなり、他のすべてが壊れる)。

何がありますか?コールバックが呼び出されないのはなぜですか?私は本当に近くにちょうどいい命題が必要なように感じます...

私はクライアント側ですべてのクエリを実行していましたが、_ensureIndexや私が知ることのできる全文検索は、基本的にはサーバー側のメソッド呼び出し(クライアント上のミニ・モンゴでは使用できません)を介してのみ使用できます。


[OK]をEDIT

、私は物事がパブリッシュ/サブスクライブ移行、および全体的な彼らが作業しているが、私はそれはとてもセッション値はセレクタであることを確認しようとすると、それが正しく動作していません。私が "購読する"の場所の問題かもしれません。

私はパラメータ "セレクタ"(意図はmongoセレクタを渡すことになっています)を持つパブリッシュを持っています。クライアントで

、私は次のようにサブスクライブしている:

Meteor.subscribe('my-collection-query', Session.get("my-collection-query-filter")); 

しかし、それはむら振る舞いを持っています。ある記事では、これをTemplates.body.onCreateに置くことを勧めました。それは動作しますが、何か反応がありません(コンソールでセッション値を変更すると、表示された値は変更されません)。

私は別の記事のアドバイスに従うと、そのコレクションを呼び出すテンプレートの関連するヘルパー機能にサブスクライブ権を置きます。それはうまくいきますが、そのコレクションに複数のテンプレートが呼び出されている場合は、それらを動作させるたびにサブスクリプションを追加する必要があります。

どちらも正しいことではありません。私は「購読している」とは「パイプを敷設して仕事をする」というものだが、それは間違っているかもしれない。

私は文書を読み続けるつもりです。たぶんどこかで、サブスクリプションの範囲が適切に説明されています。

+0

さらなる読書をした後、記号は「公開/購読を使用して自動公開を削除」を指していますが、それは本当に唯一の方法ですか? – user2671688

+0

何を手に入れますか?エラーメッセージはありますか?コールバックの{console.error(error)}(エラー) – Areca

+0

いいえ、コールバックが呼び出されなかった可能性があります。この[若干関連した](http://stackoverflow.com/questions/25149189/returning-cursor-results-causes-stack-size-exceeded-error)の質問では、カーソルはjson-シリアライズ可能なオブジェクトなので、全文検索をサポートしたい場合は、実際に公開することが唯一の方法だと思います。 – user2671688

答えて

0

データを公開し、クライアントに登録する必要があります。 「自動公開」をまだ削除していない場合、あなたが所有しているものはすべて自動的に公開されます。したがって、クライアント上のコレクションを照会すると(例えば、ヘルパーメソッドで)、結果が得られます。このパッケージは、迅速な開発とプロトタイプ作成にのみ有効ですが、実際のアプリケーションでは削除する必要があります。あなたのアプリのニーズとユースケースに合わせてデータを公開する必要があります。

+0

助けてくれてありがとう、私は先週一生懸命働いた。これは基本的に正解です。 まだ購読する時期や必要な箇所での更新を待つ方法についてのベストプラクティスについて学ぶ必要がありますが、「テンプレートごとの定期購読」のデザインパターンを示す記事がありますので、あまりにもひどいです。 よろしく! – user2671688

関連する問題