何とか私の問題を解決しました。流星:データを購読できない
私は使用していません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をそれにプッシュする必要がありますか?
は、実際に私はそれを考え出したし、あなたの興味のための多くのおかげで。私は_Meteor.methods_を使うことに決めました。 –