流星:订阅不工作
问题描述:
我正在尝试构建一个非常简单的流星应用。我已经实施了所有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}}
有什么建议吗?提前致谢。
答
而不是{{task.title}}
尝试{{title}}
并检查浏览器控制台Task.find({})。fetch()并查看您是否可以看到记录。
答
可能是因为您的订阅尚未准备好在客户端上使用。 你所要做的就是包装您each
代码subscriptionsReady
功能象下面这样:
{{#if Template.subscriptionsReady}}
{{#each task in tasks }}
{{task.title}}
{{/each}}
{{else}}
<p>Loading...</p>
{{/if}}
以上应该工作。 您可以检查this链接,如何使用subscriptionsReady
取而代之的更多信息'{{task.title}}''尝试的{{title}}',也为您在浏览器控制台'Task.find({}) .fetch()'看看你是否可以看到记录 – Sasikanth
它工作@Sasikanth,谢谢 – sabbir
我发布它作为答案,你可以接受它来关闭问题。 – Sasikanth