【问题标题】:Meteor.js error in loading TemplatesMeteor.js 加载模板时出错
【发布时间】: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}} 代码块可以对其进行迭代并捕获所有标题以生成 &lt;ul&gt;。我在主页模板上添加{{&gt; roomsList}}

我正在使用的包

我在其他#meteor 问题中看到过这一点,所以我将继续在此处列出:

  1. accounts-password 1.0.4 帐户密码支持
  2. accounts-ui 1.1.3 向应用添加登录小部件的简单模板
  3. iron:router 1.0.1 专为 Meteor 设计的路由
  4. meteor-platform 1.2.0 在您的应用中包含一组标准的 Meteor 包
  5. 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


【解决方案1】:

在您的发布代码中,您必须使用 Rooms 而不是 rooms,这是您的收藏名称。像这样

 Meteor.publish("rooms", function() {
   return Rooms.find();
});

【讨论】:

    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 2018-11-22
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 2018-05-14
    相关资源
    最近更新 更多