2017-03-03 204 views
0

我正在尝试构建一个非常简单的流星应用。我已经实施了所有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 \ components \ home \ home.html

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

     {{task.title}} 

    {{/each}} 

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

+1

取而代之的更多信息'{{task.title}}''尝试的{{title}}',也为您在浏览器控制台'Task.find({}) .fetch()'看看你是否可以看到记录 – Sasikanth

+0

它工作@Sasikanth,谢谢 – sabbir

+0

我发布它作为答案,你可以接受它来关闭问题。 – Sasikanth

回答

0

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

0

可能是因为您的订阅尚未准备好在客户端上使用。 你所要做的就是包装您each代码subscriptionsReady功能象下面这样:

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

以上应该工作。 您可以检查this链接,如何使用subscriptionsReady