【发布时间】:2015-01-15 07:43:54
【问题描述】:
在我的应用程序上一切正常(包括 loadingTemplate,它只在实际需要时才被路由),直到我决定在我的主页模板上创建一个简单的列表,以显示名为 Rooms 的 Mongo 集合中的每个文档,按其标题.
我做了什么
HTML:
<template name="roomsList">
<div>
{{#each rooms}}
{{> roomsListItem}}
{{/each}}
</div>
</template>
<template name="roomsListItem">
<ul>
<li>{{title}}</li>
</ul>
</template>
JS:
Template.roomsList.helpers({
rooms: function() {
return Rooms.find();
}
});
如您所见,非常基本的东西。 JS 只是应该返回 Rooms 集合上的所有文档(没有很多),以便 {{#each}} 代码块可以对其进行迭代并捕获所有标题以生成 <ul>。我在主页模板上添加{{> roomsList}}。
我正在使用的包
我在其他#meteor 问题中看到过这一点,所以我将继续在此处列出:
- accounts-password 1.0.4 帐户密码支持
- accounts-ui 1.1.3 向应用添加登录小部件的简单模板
- iron:router 1.0.1 专为 Meteor 设计的路由
- meteor-platform 1.2.0 在您的应用中包含一组标准的 Meteor 包
- sacha:spin 2.0.4 用于 Meteor 的简单微调器包
发生了什么
首先,这是 bash 错误消息:
I20141118-05:25:21.855(-2)? Exception from sub k7PEn4QcT9McjF8tw ReferenceError: rooms is not defined
I20141118-05:25:21.856(-2)? at null._handler (app/server/publications.js:2:9)
I20141118-05:25:21.856(-2)? at maybeAuditArgumentChecks (packages/ddp/livedata_server.js:1599)
I20141118-05:25:21.856(-2)? at _.extend._runHandler (packages/ddp/livedata_server.js:943)
I20141118-05:25:21.857(-2)? at _.extend._startSubscription (packages/ddp/livedata_server.js:769)
I20141118-05:25:21.857(-2)? at _.extend.protocol_handlers.sub (packages/ddp/livedata_server.js:582)
I20141118-05:25:21.860(-2)? at packages/ddp/livedata_server.js:546
我怀疑第一行是导致所有其他行的原因,但我无法弄清楚它在告诉我什么。我以同样的方式在应用程序的其他部分调用该集合,没有问题。所以我不知道是什么导致了这里的问题!
其次,现在我的主页模板无法加载。加载的只是加载模板,它在 Router.settings 上声明。它为每个 URL 加载,并且从不重定向到任何东西。我尝试登录并注销。
最后,这个列表甚至不起作用,因为我已经将 {{>roomsList}} 放在加载模板上,只是为了看看它是否有效。
我该如何解决这个问题?
更新: cmets要求我分享订阅和发布的代码,因为可能有一些错别字。我不认为有,因为我在代码的另一部分访问该集合没有问题,但它们是:
发布(在/服务器上):
Meteor.publish("rooms", function() {
return rooms.find();
});
订阅(在 /lib 上):
Router.configure({
layoutTemplate: "layout",
loadingTemplate: "loading",
notFoundTemplate: "notFound",
waitOn: function() { return Meteor.subscribe('rooms'); }
});
【问题讨论】:
-
您是否完成了对房间收藏的发布和订阅,请查看here
-
我在 /server 文件夹中的文件上设置了 Meteor.publish(将其移至 /lib 进行测试,没有任何变化,移回 /server),并且我已设置订阅作为
Router.configure上的waitOn。 -
分享订阅和发布代码。我觉得publications.js有错别字,看看log room是不是没有定义。
-
完成。我已经在问题中进行了编辑。感谢您调查它。 :)
标签: javascript mongodb meteor