流星:订阅不起作用

时间:2017-03-03 23:08:20

标签: meteor

我正在尝试构建一个非常简单的 Meteor应用。我已经实现了所有CRUD。但我的问题是,当我使用发布然后订阅时,不会返回任何数据。我的代码如下:

进口\ API \任务\ tasks.js

import { Mongo } from 'meteor/mongo';
import { Meteor } from 'meteor/meteor';

TasksSchema = new SimpleSchema({
   title: {
    type: String
   },
   owner: {
     type: String
   }
 });

export const Tasks = new Mongo.Collection('tasks', { schema: TasksSchema });

if (Meteor.isServer) {
   Meteor.publish('task.list', function() {
       return Tasks.find({ owner: this.userId });
   });
}

进口\ UI \部件\家\ home.js

import { Tasks } from '/imports/api/tasks/tasks.js';
import { Meteor } from 'meteor/meteor';
import { Template } from 'meteor/templating'
import { ReactiveDict } from 'meteor/reactive-dict';

import './home.html';

if (Meteor.isClient) {
    Template.home.onCreated(function bodyOnCreated() {
       Meteor.subscribe('task.list');
    });

    Template.home.helpers({
        tasks() {
            let userId = Meteor.userId();
            return Tasks.find({ owner: userId }, { sort: { updatedAt: -1 } });
        }
   });
}

进口\ UI \部件\家\ home.html的

 <!-- here nothing is shown,although I have data -->
 {{#each task in tasks  }}

      {{task.title}} 

  {{/each}}

有什么建议吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

而不是{{task.title}}尝试{{title}}并检查浏览器控制台Task.find({})。fetch()并查看是否可以查看记录。

答案 1 :(得分:0)

这可能是因为您的订阅尚未准备好在客户端上使用。 您需要做的是将each代码包含在subscriptionsReady函数中,如下所示:

{{#if Template.subscriptionsReady}}    
  {{#each task in tasks  }}
    {{task.title}} 
  {{/each}}
{{else}}
  <p>Loading...</p>
{{/if}}

以上应该有效。 您可以查看this链接,了解有关如何使用subscriptionsReady

的更多信息