如何告诉 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}});
});
我有以下条件...
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
字段...仅此而已...
谢谢你...
我不确定是否有直接的方法来执行此操作,但这可能有效:
我们的想法是在 "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();
});
});
为什么不将 noobserveA
和 noobserveB
存储到本地集合中?
存储到本地集合后,从本地集合中获取 noobserveA
和 noobserveB
。由于本地集合与服务器没有连接,因此服务器中的每次更新都不会对 noobserveA
和 noobserveB
产生任何影响。然后,noobserveA
和 noobserveB
将是静态的,如您所愿。
这样,您就不必接触高级出版物了。
我们通常发布数据如下...
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
字段...仅此而已...
谢谢你...
我不确定是否有直接的方法来执行此操作,但这可能有效:
我们的想法是在 "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();
});
});
为什么不将 noobserveA
和 noobserveB
存储到本地集合中?
存储到本地集合后,从本地集合中获取 noobserveA
和 noobserveB
。由于本地集合与服务器没有连接,因此服务器中的每次更新都不会对 noobserveA
和 noobserveB
产生任何影响。然后,noobserveA
和 noobserveB
将是静态的,如您所愿。
这样,您就不必接触高级出版物了。