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

时间:2016-02-02 04:17:38

标签: javascript meteor ddp

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

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

我的条件如下......

  • observeAobserveB是反应数据,所以我需要观察它们......
  • noobserveAnoobserveB是静态数据,所以我不需要观察它们......

通过上述发布,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字段...就是这样,而且都是......

谢谢你...

2 个答案:

答案 0 :(得分:0)

我不确定是否有直接的方式来做到这一点,但这可能会有效:

我们的想法是我们在观察"观察"领域。然后,当添加doc时,我们遍历" noObserve"字段并通过执行数据库查找获取其值。之后,我们不会监控noObserve字段。

您可能需要也可能不需要在"更改"回调取决于您所需的功能。

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();
    });
});

答案 1 :(得分:0)

为什么不将noobserveAnoobserveB存储到本地收藏中?

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

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