Meteor订阅不从服务器加载数据

时间:2018-06-06 23:52:47

标签: meteor meteor-blaze

我遇到了流星1.6的困难。首先,我创建了一个数据库实例,并尝试在客户端进行订阅。通过表单,我可以将数据输入我的数据库。但无法通过订阅检索它。任何人都可以告诉我在我的代码中做了什么错误?

import { Template } from "meteor/templating";
import { Notes } from "../lib/collection";
import { Meteor } from "meteor/meteor";
// import { ReactiveDict } from 'meteor/reactive-dict';
import "./main.html";
/* 
Template.body.onCreated(function bodyOnCreated() {
  this.state = new ReactiveDict();

  Meteor.subscribe("db1");
}); */

Template.Display.helpers({

  notes() {
    Meteor.subscribe("db1");
    return Meteor.call('data');
  }
});

Template.body.events({
  "click .delete": function() {
    Notes.remove(this._id);
  },

  "submit .formSubmit": function(event) {
    event.preventDefault();
    let target = event.target;
    let name = target.name.value;

    Meteor.call("inputs", name);

    target.name.value = "";

    return false;
  },
  "click .userDetail": function() {
    if (confirm("Delete the user Detail ?")) {
      Notes.remove(this._id);
    }
  }
});

这是发布代码:

import { Mongo } from 'meteor/mongo';
export const Notes = new Mongo.Collection('notes');

Meteor.methods({
    inputs:(name)=> {
      if (!Meteor.user()) {
        throw Meteor.Error("Logged in");
      }
      Notes.insert({
        name: name,
        createdAt: new Date()
      });
    },
    data:()=>{
        return Notes.find({});
    }
  });

1 个答案:

答案 0 :(得分:2)

Meteor.subscribe("notes");应该在Template.body.onCreated lifycycle方法中。你需要写一个 单独发布代码而不是Meteor.method内部。见下面的格式,

Meteor.publish('notes', function tasksPublication() {
    return Notes.find({});
});

帮助者内部只需调用下面的订阅集合

Template.Display.helpers({
  notes() {
    return Notes.find({});
  }
});
  

**注意:**切勿在辅助方法中使用Meteor.callhelpers是被动和实时的。