如何告诉 DDP 有选择地观察更改某些字段,而不是所有定义的字段..?

how to tell DDP to selectively observe change certain field,, instead all defined fields..?

我们通常发布数据如下...

Meteor.publish('items', function(a) {
  return Items.find(a, {fields: {observeA:1, observeB:1, noobserveA:1, noobserveB:1}});
});

我有以下条件...

通过上述发布,DDP 仍然遵守 noobserveAnoobserveB..

如何告诉DDP不要观察noobserveA和noobserveB..?

我认为可能的是直接控制已发布的记录...但我什至不知道如何让它发挥作用..高级发布现在对我来说感觉太多了...

Meteor.publish('items', function(a) {
  var self = this;
  var handle = Items.find(a || {}).observeChanges({
    changed: function(id, fields) {
      self.changed("itemdata", id, fields);
    }
  });
  self.ready();
  self.onStop(function () {
    handle.stop();
  });
});

在这之后我应该做什么..??我不知道我现在在做什么......所以如果你知道如何不观察 noobserveAnoobserveB 无论是高级出版物还是其他想法,请随时写回答...我需要的是不观察 noobserveAnoobserveB 字段...仅此而已...

谢谢你...

我不确定是否有直接的方法来执行此操作,但这可能有效:

我们的想法是在 "observe" 字段上设置一个观察者。然后,当添加文档时,我们遍历 "noObserve" 字段并通过数据库查找获取它们的值。之后,我们不再监控 noObserve 字段。

您可能需要也可能不需要在 "changed" 回调中执行相同的操作,具体取决于您想要的功能。

Meteor.publish("myPub", function(docId) {

    let self = this;
    let observeFields = {observeA: 1, observeB: 1};
    let noObserveFields = ['noObserveA', 'noObserveB'];

    let cursor = myCollection.find(docId, {fields: observeFields});

    let handle = cursor.observeChanges({
        added: function(id, fields) {
            let doc = myCollection.findOne(id);
            noObserveFields.forEach(function(f) {
                fields[f] = doc[f];
            });
            self.added("my_collection", id, fields);    
        },
        changed: function(id, fields) {
            self.changed("my_collection", id, fields);
        },
        removed: function(id) {
            self.removed(id);
        }
    });

    self.ready();

    self.onStop(function() {
        handle.stop();
    });
});

为什么不将 noobserveAnoobserveB 存储到本地集合中?

存储到本地集合后,从本地集合中获取 noobserveAnoobserveB。由于本地集合与服务器没有连接,因此服务器中的每次更新都不会对 noobserveAnoobserveB 产生任何影响。然后,noobserveAnoobserveB 将是静态的,如您所愿。

这样,您就不必接触高级出版物了。