我正在使用meteor,我对发布功能(服务器端)有疑问
Meteor.publish('users', function () { .... }
我现在将文件发送到具有其他收藏品ID的浏览器。例如,任务文档属于项目
{
title: '....',
projectId: 'KjbJHvJCHTCJGVY234',
...
}
我想要的是在此文档projectTitle
中添加属性,因此我不必在客户端上查找项目。但是,当我在publish
函数中添加此属性时,它不会发送到客户端。这就是我尝试过的:
Meteor.publish('tasks', function () {
var tasks = Tasks.find();
tasks.forEach(function (task) {
var project = Projects.findOne({_id: task.projectId});
task.projectTitle = project.title;
});
return tasks;
}
如何修改发布函数中的文档(非持久性)?
答案 0 :(得分:2)
你可以这样做:
Meteor.publish("tasks", function() {
var transform = function(task) {
var project = Projects.findOne({_id: task.projectId});
task.projectTitle = project.title;
return task;
}
var self = this;
var tasks = Tasks.find().observe({
added: function (document) {
self.added('tasks', document._id, transform(document));
},
changed: function (newDocument, oldDocument) {
self.changed('tasks', document._id, transform(newDocument));
},
removed: function (oldDocument) {
self.removed('tasks', oldDocument._id);
}
});
self.ready();
self.onStop(function () {
tasks.stop();
});
});
那里有很多自定义逻辑,但'transform'基本上添加了属性。
答案 1 :(得分:0)
您的代码看起来不错,但您忘记了任务请求中的.fetch()
方法。它应该是var tasks = Tasks.find().fetch();