2016-04-24 11 views
0

何とか私の問題を解決しました。流星:データを購読できない

私は使用していませんMeteor.methods、その後私はそれらを使い始めました。

私はまだサブスクリプションを使用していない、物事を公開しています。

---

if (Meteor.isClient) { 
    Template.upload.events({ 
     'click #uploadButton': function(){ 

      // Some variable definitons 
      // like someValueToInsert1, someValueToInsert2 etc 

      Meteor.call('insertDoc', someValueToInsert1, someValueToInsert2); 

      // That's all. 
      // But you can add your callback your Meteor.call function 
      // To pass data from server to client like: 

      Meteor.call('insertDoc', someValueToInsert1, someValueToInsert2, function(error, result) { 
       if(!error) Router.go('seeUploadedDataByID', { id: result }); 
      }); 
     } 
    }); 
} 

upload.jsクライアントにソリューション---

サーバー/ methods.jsで

if (Meteor.isServer) { 
    Meteor.methods({ 
     insertDoc: function(someValueToInsert1, someValueToInsert2) { 
      return Docs.insert({ 
       owner: Meteor.user().username, 
       type: someValueToInsert1, 
       files: someValueToInsert2 
      }); 

      // `return Docs.insert()` function because 
      // Docs.insert returning the _id value of 
      // this entry. And i will use the _id value 
      // at client side. 

      // For ex.: Insert doc and go to doc page 
      // Used router like this: 
      // http:// ... /document/:id/view 
      // http:// ... /document/:id/edit 
      // http:// ... /document/:id/general 

     } 
    }); 
} 

は/ ---私の問題だった---

も試しましたたくさんの方法。

アプリ:ユーザーはドキュメントを作成できます。 Docsはコレクションです。

ユーザーがdocを作成する場合は、doc idをMeteor.user()。profile.docsにプッシュします。私がやったこと

ウェイ1:Router.js

Router.route("/docs", { 
    "name": "docs", 
    data: function(){ 
     var userDocs = Meteor.users.find({_id: thisId}, {fields: {"profile.docs": 1}});; 
     return Docs.find({_id: {$all: userDocs}}); 

     // console.log(Docs.find({_id: {$all: userDocs}})) 
     // This console.log returns a weird data, not what i want 
     // It looks like Mongo function 
    } 
}); 

ウェイ2:サーバー/ publishs.jsクライアントで

Meteor.publish("myDocs", function() { 
    return Meteor.users.find({_id: this.userId}, {fields: {"profile": 1}}); 
    // Actually i wanted to reach userData first 
    // If i can reach datas, i will try to reach profile.docs 
}); 
その後、

で/docs.js

0123その後、
Template.docs.onCreated(function() { 
    this.subscribe("myDocs"); 
}); 

クライアント/ docs.htmlで

{{#if Template.subscriptionsReady}} 
    {{#each myDocs}} 
     {{this.docs}} 
     {{this.profile}} 
     {{this}} 
     {{this[0]}}</div> 
    {{/each}} 
{{else}} 
    Loading... 
{{/if}} 

私は、レンダリング、ロード言う...、何もappersません。

ウェイ3:クライアント/ docs.js

Template.docs.helpers({ 
    myDocs: function(){ 
     var docs = Meteor.user().profile.docs; 
     var docsArr = []; 
     for (var i=0;i<docs.length;i++){ 
      var doc = Docs.findOne({_id: docs[i]}); 
      docsArr.push(doc); 
     } 
     return docsArr; 
    } 
}); 

では、私は目を覚ましている間の時間の間、この問題を解決しようとしています。

Q:新しいユーザーコレクションを作成し、docIdをそれにプッシュする必要がありますか?

答えて

0

デフォルトでは、ユーザー名、電子メール、およびプロファイルが公開されています。 は、だから、このソリューションを試みることができる:

router.js

Router.route('/docs', { 
    name: 'docs', 
    waitOn: function() { 
     if(Meteor.user()){ 
      return Meteor.subscribe('myDocs', Meteor.user().profile.docs); 
     } 
    } 
}); 

サーバー/のPUBLISH。JS

Meteor.publish("myDocs", function(docs) { 
    return Docs.find({_id: {$in: docs}}); 
}); 

クライアント/ docs.html

{{#each myDocs}} 
    {{title}} 
    {{description}} 
{{/each}} 

クライアント/ docs.js

Template.docs.helpers({ 
    myDocs: function(){ 
     return Docs.find(); 
    } 
}); 
+0

は、実際に私はそれを考え出したし、あなたの興味のための多くのおかげで。私は_Meteor.methods_を使うことに決めました。 –

関連する問題