В вашей публикации вместо того, чтобы возвращать курсор, вы можете использовать публичный api более низкого уровня, чтобы иметь более тонкий контроль над результатами.
Например, когда вы возвращаете курсор из публикации, Метеор вызывает функцию _publishCursor, которая выглядит следующим образом:
Mongo.Collection._publishCursor = function (cursor, sub, collection) {
var observeHandle = cursor.observeChanges({
added: function (id, fields) {
sub.added(collection, id, fields);
},
changed: function (id, fields) {
sub.changed(collection, id, fields);
},
removed: function (id) {
sub.removed(collection, id);
}
});
// We don't call sub.ready() here: it gets called in livedata_server, after
// possibly calling _publishCursor on multiple returned cursors.
// register stop callback (expects lambda w/ no args).
sub.onStop(function() {observeHandle.stop();});
// return the observeHandle in case it needs to be stopped early
return observeHandle;
};
Таким образом, вы можете изменить вашу публикацию, в основном, делают то же самое, но и опубликовать текстовое поле, которое получает свое значение из поля описания, например так:
Учитывая следующие коллекции:
Вы опубликовать п соборование может выглядеть следующим образом:
Meteor.publish("myPub", function() {
var sub = this;
var observeHandle = myCollection.find().observeChanges({
added: function (id, fields) {
fields.text = fields.description; // assign text value here
sub.added("my_collection", id, fields);
},
changed: function (id, fields) {
fields.text = fields.description; // assign text value here
sub.changed("my_collection", id, fields);
},
removed: function (id) {
sub.removed("my_collection", id);
}
});
sub.ready()
// register stop callback (expects lambda w/ no args).
sub.onStop(function() {observeHandle.stop();});
};
Как быстро устранить проблему я использую Meteor.map и _.extend, чтобы добавить поле в фильме курсора, но это на самом деле не реактивная – Sonne
Есть несколько пакетов для этого, как reywood: publish- составная или peerlibrary: реактивно-публиковать – MrE