我有一个发布功能如下:
Meteor.publish('tasks', function (name) {
var project = Projects.findOne({name: name});
return Tasks.find({projectId: project._id});
});
Run Code Online (Sandbox Code Playgroud)
现在假设在某些时候对Projects进行了更改,结果是上面的内容Projects.findOne返回一个不同的项目,因此Tasks.find将返回其他任务.但是,对项目所做的更改不会重新发布任务
我已经使用了reactivePublish,但事实证明包有问题(并且没有任何单元测试).那么,是否有一种简单的方法可以在项目更改时重新发布此发布功能?
所以我开始使用ES6 Meteor,但显然如果你试图使用Meteor.publish箭头函数的语法,this.userId是未定义的,而如果你使用它与常规的function(){} this.userId工作完美,我假设是一种转换过程,分配不同的这个,到userId但只是一个猜测,有谁知道到底发生了什么?
Meteor.startup(function() {
Meteor.publish("Activities", function() { //with function
console.log(this.userId); //TS8vTE3z56LLcaCb5
});
});
Meteor.startup(function() {
Meteor.publish("Activities", ()=> { //with arrow function
console.log(this.userId); //undefined
});
});
Run Code Online (Sandbox Code Playgroud) 我可以在单个订阅调用中发布多个集合吗?如果是的话请指导我.
我有一个仅包含的publications.js文件
Meteor.publish('org', function(_id){
return Organizations.findOne(_id);
});
Run Code Online (Sandbox Code Playgroud)
当事情呈现时,我在控制台中得到它:
Uncaught TypeError: Meteor.publish is not a function
Run Code Online (Sandbox Code Playgroud)
我在这里想念的是什么......我确信这很痛苦.
我有一个简单的Meteor订阅,我在加载数据时显示加载消息.但是,如果订阅失败,我不知道如何显示错误消息.
export const MyAwesomeComponent = createContainer(() => {
let sub = Meteor.subscribe('some-data');
if (!sub.ready()) return { message: 'Loading...'};
if (sub.failed()) return { message: 'Failed.' }; // How to do this?
return {
data: Data.find().fetch()
}
}, MyInternalRenderComponent);
Run Code Online (Sandbox Code Playgroud)
问题是,订阅对象没有failed()方法,只有ready()查询.如何将订阅失败作为createContainer()方法中的道具传递?
我知道这个Meteor.subscribe方法有一个onStop回调用于这种情况,但我不知道如何粘合它以传递属性.
我正在努力更好地理解发布/订阅模型的工作原理.
具体来说,我指的是教程中的这一步.
if (Meteor.isServer) {
Meteor.publish('tasks', function tasksPublication() {
return Tasks.find();
});
}
Run Code Online (Sandbox Code Playgroud)
该tasksPublication教程之后的任何地方都不会使用该名称.