Meteor.js,在发布时扩展对象

时间:2013-05-02 08:19:37

标签: meteor publish-subscribe

我有消息集合。
每封邮件都有一个 userId 我还定义了 displayUsername()函数,该函数获取用户的id,并返回 fullName

我的问题是我可以在服务器上使用underscorejs扩展它。或什么是扩展对象的实用方法

messages = new Meteor.Collection("messages");

Meteor.publish("messages", function () {
  var allMessages = messages.find({}).fetch();
  return _.each(allMessages, function (msg) {
    return _.extend(msg, {
      username: displayName(msg.userId)
    });
});

所以我想要

{{#each messages}}
  <p><strong>{{username}}:</strong> {{messageBody}}</p>
{{/each}}

我知道,在客户端可以使用它,但我会再用它一次......

感谢..

2 个答案:

答案 0 :(得分:2)

检查Collection.find上的转换

http://docs.meteor.com/#find

克里斯有关于“转换收藏文件”的视频讲座

Meteor Collections上的转换选项允许我们在将MongoDB文档在fetch,findOne或find调用中返回之前以及在它们传递给observer回调之前对其进行转换。它为Model层奠定了基础。在这一集中,我将构建一个简单的转换类,它具有formatPrice方法,价格在数据库中以美分的形式存储。

http://www.eventedmind.com/posts/meteor-transforming-collection-documents

答案 1 :(得分:0)

不幸的是,你无法发送转型的收藏品。但是你可以在客户端进行转换。

例如,当您在客户端上定义集合时:

客户端js

var messages = new Meteor.Collection("messages", {transform:function(doc) {
    doc.username = displayName(doc.userId);
    return doc;
}});