【问题标题】:How to subscribe in Meteor to a collection如何在 Meteor 中订阅收藏
【发布时间】:2017-02-06 03:19:29
【问题描述】:

我有一个问题,我删除了自动发布,现在我想再次订阅我的收藏,但它不起作用;(

这是我的两个集合的 lib 代码:

Events = new Mongo.Collection('events');
Friends = new Mongo.Collection('friends');

然后是我的服务器 main.js

import { Meteor } from 'meteor/meteor';

Meteor.startup(() => {
  // code to run on server at startup



});

if (Meteor.isServer) {
  Meteor.publish("events", function() {
      return events.find();
  })
  Meteor.publish("friends", function() {
      return friends.find();
  })
}

最后我的客户端代码在客户端的 main.js 中

import { Template } from 'meteor/templating';
import { ReactiveVar } from 'meteor/reactive-var';

import './main.html';

Meteor.subscribe("events");
Meteor.subscribe("friends");

我正在运行 Meteor 1.4,我的问题是我无法从集合中获取信息

这里有一些自动发布已经工作的代码

Template.NeuesEvent.events({
    "submit .add-event": function(event){
        var Name = event.target.name.value;
        var Beschreibung = event.target.beschreibung.value;
        var Datum = event.target.Datum.value;
        var Autor = Meteor.userId();
        var eingeladene = [];
             $.each($('.FreundeCheckbox:checked'), function(){            
                eingeladene.push($(this).val());
            });


        if (Name == "")
        {
            confirm("Das Event braucht einen Namen ;)")
        }
        else {

        Events.insert({
            Name: Name,
            Beschreibung: Beschreibung,
            erstelltAm: new Date(),
            Datum: Datum,
            Eingeladen: eingeladene,
            Autor: Autor
        });

        event.target.name.value = "";
        event.target.beschreibung.value = "";
        FlowRouter.go('/meineEvents');

        return false;
    }
    }
});

以及“打印”出来的助手

Template.meineEvents.helpers({
    event: function(){
        return Events.find({}, {sort: {createdAt: -1}});
    }
});

希望你能帮我修改它,让它再次工作谢谢 ;)

【问题讨论】:

  • 希望你明白@zim 的意思......你应该export你的集合在他们定义的同一个文件中,然后import他们就像你做Meteor一样:import { Events } from 'relative/path/to/file';

标签: javascript html mongodb meteor


【解决方案1】:

您必须引用符号,而不是集合名称,如下所示:

if (Meteor.isServer) {
  Meteor.publish("events", function() {
      return Events.find();
  })
  Meteor.publish("friends", function() {
      return Friends.find();
  })
}

编辑:

你说你有这些收藏:

Events = new Mongo.Collection('events');
Friends = new Mongo.Collection('friends');

它们在哪里定义?它们对客户端和服务器都可用吗?它们在任何名为“/imports”的文件夹下吗?如果是这样,那么它们不会被急切地加载,您需要导出/导入这些符号。

编辑 2:

接下来要检查的是查看数据是否已发布。最简单的方法是安装 meteortoys:allthings (https://atmospherejs.com/meteortoys/allthings) 并查看数据是否到达客户端。如果没有,那么我会检查以确保您提供的 subscribe() 行与 NeuesEvent 模板相关联。

我通常在模板中进行订阅,如下所示:

Template.NeuesEvent.onCreated(function() {
    this.subscribe('events');
    this.subscribe('friends');
});

...但这取决于您的用例。在这里,只要 NeuesEvent 模板处于活动状态,这些订阅就会处于活动状态。当您切换到不同的模板时,订阅将结束。

【讨论】:

  • 可能有助于注意他也应该导出/导入集合
  • 没有帮助 ;(
  • chazsolo 是什么意思?
  • @chazsolo,好点,更新了我的答案以提出相关问题。
  • 它们在 lib 文件夹中,我认为这个文件夹在两边还是我错了?
猜你喜欢
  • 2015-08-12
  • 2016-08-13
  • 2017-02-03
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
相关资源
最近更新 更多