Bạn có thể thêm và sử dụng các chức năng sau:
Meteor.publishWithTransform = function(publicationName, cursorGetter , transform)
{
transform = transform || function(o){return o;};
Meteor.publish(publicationName, function()
{
var cursor = cursorGetter.apply(this, arguments);
var collectionName = cursor._cursorDescription.collectionName;
var self = this;
var observer = cursor.observe({
added: function (document) {
self.added(collectionName, document._id, transform(document));
},
changed: function (newDocument, oldDocument) {
self.changed(collectionName, newDocument._id, transform(newDocument));
},
removed: function (oldDocument) {
self.removed(collectionName, oldDocument._id);
}
});
self.onStop(function() {
observer.stop();
});
self.ready();
});
}
sử dụng (server side):
Meteor.publishWithTransform("publication-name", function() {
aCollection.find({})
}, function (item)
{
item.aField = "something";
return item;
});
Hạn chế: nếu bạn lưu tài liệu đã xuất bản, bạn cũng sẽ lưu các thay đổi đã thêm. Ở đây khách hàng không có đầu mối tài sản "aField" đã được thêm vào trong quá trình xuất bản.
Nguồn
2015-06-02 10:20:07
Thay vì tạo ra những lĩnh vực mới trong chuyển đổi chức năng, bạn không thể thêm một chức năng để tài liệu đó sẽ trở lại cùng giá trị? Bằng cách này, bạn có thể nhận được xung quanh vấn đề bạn (nghĩ rằng bạn) có? –
Ồ vâng. Nhưng tôi đã quan tâm nhiều hơn trong việc biết liệu tài liệu được chuyển đổi có thực sự được truyền từ máy chủ đến máy khách hay không. Chỉ cần một chút kỹ thuật. – Dave
Chỉ cần lưu ý rằng hàm chuyển đổi được áp dụng sau khi bạn 'fetch()' tài liệu (hoặc tương đương). 'find()' sẽ trả về con trỏ. Sau khi tìm nạp kết quả, hàm được áp dụng. – Sebastian