我们通常发布数据如下......
Meteor.publish('items', function(a) {
return Items.find(a, {fields: {observeA:1, observeB:1, noobserveA:1, noobserveB:1}});
});
我的条件如下......
observeA
和observeB
是反应数据,所以我需要观察它们...... noobserveA
和noobserveB
是静态数据,所以我不需要观察它们...... 通过上述发布,DDP仍会观察noobserveA
和noobserveB
..
如何告诉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();
});
});
之后该怎么办.. ??我不知道我现在正在做什么...所以如果你知道如何不通过高级出版物或其他想法观察noobserveA
和noobserveB
,请随意写回答......我需要的是不要观察noobserveA
和noobserveB
字段...就是这样,而且都是......
答案 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)
为什么不将noobserveA
和noobserveB
存储到本地收藏中?
存储到本地集合后,您从本地集合中获取noobserveA
和noobserveB
。由于本地收集与服务器没有任何关联,因此服务器中的每次更新都不会对noobserveA
和noobserveB
产生任何影响。然后,noobserveA
和noobserveB
将是您想要的静态。
这样,您就不必触及高级出版物。