不知怎的,我解决了我的问题。
我没有使用 Meteor.methods ,然后我开始使用它们。
我仍然没有使用订阅,发布内容。
在server / 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
}
});
}
在client / upload.js
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 });
});
}
});
}
尝试了太多方法。
我的应用:用户可以创建文档。 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:在server / 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
});
然后在client / docs.js
Template.docs.onCreated(function() {
this.subscribe("myDocs");
});
然后在client / docs.html中
{{#if Template.subscriptionsReady}}
{{#each myDocs}}
{{this.docs}}
{{this.profile}}
{{this}}
{{this[0]}}</div>
{{/each}}
{{else}}
Loading...
{{/if}}
当我渲染时,表示装载..然后没有任何吸引力。
Way3:在client / 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;
}
});
我想在清醒的时候解决这个问题。
问:我应该创建一个新的用户集合并将docId推入其中吗?
答案 0 :(得分:0)
默认情况下,会发布用户名,电子邮件和个人资料。 所以你可以尝试这个解决方案:
router.js
Router.route('/docs', {
name: 'docs',
waitOn: function() {
if(Meteor.user()){
return Meteor.subscribe('myDocs', Meteor.user().profile.docs);
}
}
});
服务器/ publishs.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();
}
});