首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流星数据隔离

流星数据隔离
EN

Stack Overflow用户
提问于 2016-08-16 08:48:19
回答 2查看 51关注 0票数 0

如何在模板之间隔离订阅数据?

例如,我有一个带有两个不同模板的页面:

1)主题清单

2)热门话题。

为此,我有两个不同的、不同的、Meteor.publish和Subscribtions。

1)在主题列表模板中,我按CreatedAt-字段进行了排序。

代码语言:javascript
复制
Meteor.subscribe('topics');

  Template.topics_main.helpers({
        topics:function(){
            return Topic.find({},{sort: {createdAt: -1}});
        }
  });

2)在流行列表中,我按等级字段对数据进行排序。

代码语言:javascript
复制
    Meteor.subscribe('popularTopics');
    Template.top_topics.helpers({
          topics:function(){
               return Topic.find({}, {
           sort: {
               views: -1
           },
           limit: 5
       });

   }
});

当我滚动我的主题列表时,我将从流行话题中获得数据。这不太好:)如何使用不同的订阅来隔离数据bweetwen的两个模板,而只能分离一种类型的集合?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-16 13:16:31

observeChanges可能是你所需要的。它允许您将文档发布到特定的集合中,这样您就可以让两个发布(topicspopularTopics)从服务器上的同一个集合(Topics)中获取数据,但将其发送到客户端上的不同集合(例如TopicsPopularTopics)。

下面是一个例子:

代码语言:javascript
复制
// globally somewhere
const Topics = new Mongo.Collection('topics');
const PopularTopics = new Mongo.Collection('populartopics');

添加发布,observeChanges将已发布的文档发送到客户端上的两个不同集合:

代码语言:javascript
复制
// topics.publications.js 
const abstractPublish = function (collectionName, query) {
  const cursor = Topics.find(query);

  const cursorHandle = cursor.observeChanges({
    added(id, fields) {
      this.added(collectionName, id, fields);
    },
    changed(id, fields) {
      this.changed(collectionName, id, fields);
    },
    removed(id) {
      this.removed(collectionName, id);
    }
  });

  this.onStop(()=>{
    if (cursorHandle) cursorHandle.stop();
  });

  this.ready();
};

Meteor.publish('topics', function () {
  // set up a publication to the "topics" collection
  abstractPublish.call(this, 'topics', {});
});

Meteor.publish('popularTopics', function () {
  // set up a publication to the "populartopics" collection
  abstractPublish.call(this, 'populartopics', {popular: true});
});

然后设置模板级订阅:

代码语言:javascript
复制
// topics_main.js
Template.topics_main.onCreated(function () {
  this.autorun(() => {
    this.subscribe('topics', function () {
      Topics.find().fetch(); // returns all topics
    );
  });
});

在你的热门话题模板中:

代码语言:javascript
复制
// top_topics.js
Template.top_topics.onCreated(function () {
  this.autorun(() => {
    this.subscribe('popularTopics', function () {
      PopularTopics.find().fetch(); // returns only topics that have {popular: true}
    );
  });
});
票数 0
EN

Stack Overflow用户

发布于 2016-08-16 09:09:03

这是“流星”目前出版模式的一个已知限制。

为了克服这一问题,人们想到了一些选择:

  1. 找到一种使用更精细的查询来区分数据的方法。
  2. 以另一种方式获取一些数据(例如,使用方法,而不使用pub/sub或集合)。
  3. 发布到“虚拟”集合(通过手动监视发布中的游标)。

阿波罗堆可能也很方便。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38970398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档