【发布时间】:2018-12-18 16:20:12
【问题描述】:
我一辈子都想不通为什么这个流星应用程序的客户端没有显示任何内容。我已经尝试了所有相关主题的所有建议,但似乎没有任何效果。我正在使用 msavin:mongol,我什至根本看不到客户端上的订阅,尽管 console.log() 调试输出表明它存在当前条目数。
/imports/api/friends.js:
export const Friends = new Mongo.Collection('friends');
Friends.deny({ insert() { return true; }, update() { return true; }, remove() { return true; } }); // access to collections only through method calls
/imports/api/server/friends.js:
import { Meteor } from 'meteor/meteor';
import { Friends } from '../friends.js';
Meteor.publish('friends.all', function(){
return Friends.find();
})
/imports/ui/pages/friends.js:
import { Friends } from '/imports/api/friends.js';
import './friends.html';
Template.friends.onCreated(function() {
this.subscribe('friends.all');
});
Template.friends.helpers({
friends: ()=>{ return Friends.find(); }
});
/imports/ui/pages/friends.html:
<template name="friends">
<h1 class="ui header">Friends</h1>
{{#if Template.subscriptionsReady}}
<h2 class="ui heder">friends list:</h2>
<div class="ui list">
{{#each friend in friends}}
<div class="item">{{friend.name}} ({{friend.email}})</div>
{{/each}}
</div>
{{/if}}
</template>
“好友列表”标头出现,因此 subscriptionsReady 调用返回,但我没有得到任何数据(已验证数据是否存在于数据库中)。
我也尝试将订阅移动到路由器中(使用 ostrio:flow-router-extra),当我添加订阅时,waitOn() 函数永远不会返回
这是怎么回事?
【问题讨论】:
-
另外,如果我在模板中只输出 {{ friends }},我会得到一个 [object] 文本,所以那里有一些东西,它不是 null 或 undefined。
-
您是否在控制台中遇到任何错误?我认为
this.subscribe不会起作用,因为this不是Meteor。你可以试试Meteor.subscribe吗? -
复制了您的问题,它在这里有效。您是否可能错过在 main.js 或服务器上的启动 js 文件中包含发布的 js 文件?如果未注册发布,您的订阅将自动解析为
ready。您可以使用console.log(Meteor.server.publish_handlers)在Meteor.startup上验证这一点。如果您的酒吧名称未列出,则您错过了包含它。 -
@Jankapunkt - 就是这样!我不敢相信。谢谢。特别是对于调试提示。您应该将其写下来作为答案,也许为遇到相同问题的其他人提供更多详细信息?如果有一个好的调试选项,我自己会发现发布是问题所在。