2017-04-19 5 views
0

ı次のような非常に単純なテンプレートがあります。Blazeテンプレート内にカーソルデータを表示すると、Meteor.call()で動作しません

<template name="editingUsers"> 
    <div class="container"> 
     <div class="jumbotron"> 
      <ul class="custom-list-stye"> 
       {{#each lastEditors}} 
        <li><span><strong>{{docUser.name}}</strong></span> </li> 
       {{/each}} 
      </ul> 
     </div> 
    </div> 
</template> 

私はヘルパーでHTMLのリストを埋めます。

Template.editingUsers.helpers({ 
    lastEditors: function() { 
     return Meteor.call('getLastEditors'); 
    } 
}); 

'getLastEditors'メソッドは、MongoDBクエリによってデータを返します。

getLastEditors: function() { 
     if(Meteor.user()) { 
      const lastEditors = Documents.find(
       {docUser: {$exists: true }}, 
       { 
        limit:5, 
        sort: { lastEdit: -1 }, 
       }); 
      return lastEditors; 
     } 
    } 

このコードでは、リストとして表示する必要があるデータは表示されません。しかし、私はヘルパーから直接Mongo DBクエリを作成するとすべてがOKになります。以下は作業ヘルパーコードです。あなたは、私がautopublishパッケージを続行することはできません知っているように

Template.editingUsers.helpers({ 
    lastEditors: function() { 
     return Documents.find(
      {docUser: {$exists: true }}, 
      { 
       limit:5, 
       sort: { lastEdit: -1 }, 
      }); 
    } 
}); 

(autopublishパッケージが削除されていない)と私は()Meteor.methodsを実装する必要があります。 Meteor.methodからカーソルデータを返すのがテンプレート内に表示されない理由を理解できません。あなたのコメントをお願いしますか?

答えて

1

autopublishパッケージを置き換える正しい方法は、Publish and Subscribeパターン(これはautopublishはフードの下で行います)を実装し、Meteorメソッドを使用しないことです。

最後のコード例(クライアントテンプレートヘルパーでDocumentsコレクションを直接検索する)は完全に問題ありません。テンプレートを作成するときに、少なくとも必要な場合はさらにパブリッシュすることができ、少なくとも購読することができます。

一時的な回避策として、中間のReactiveVarを使用して、テンプレートヘルパーにカーソルを表示することができます。

はまた、あなたのクライアントにコールバックしてMeteor.callを使用する必要がfeed helper from a callback

を参照してください。何も返さない。

http://docs.meteor.com/api/methods.html#Meteor-call

+0

ご意見ありがとうございます! –

+0

フィードバックいただきありがとうございます。その答えがあなたの問題を解決したり、大きな助けを与えたりした場合、人々に感謝するこの方法は答えにもなります。 – ghybs

関連する問題