【问题标题】:Using Dynamic templates correctly in Meteor在 Meteor 中正确使用动态模板
【发布时间】:2015-06-25 23:15:27
【问题描述】:

通过流星中的模板动态传递值失败,而静态传递值成功。我究竟做错了什么?设置如下

我在 Meteor 中设置了以下 2 个模板

<template name="search">
{{#each cards}}
    {{>card}}   
{{/each}}


<template name="card">
<div class="card">  
    {{docName}}
</div>
</template>

像这样向它传递值非常有效

if (Meteor.isClient) {
  Template.search.helpers({
    cards: [
      {docName: "Dr. Maga" },
      {docName: "Dr. Macha" },
    ]
 });
}

但是,像这样动态传递相同的值会失败

Cards = new Mongo.Collection("cards");

if (Meteor.isClient) {
  Template.search.helpers({
    cards: function() {
      return Cards.find({});
    }
  });
}

mongo 集合“卡片”中有数据。我在应用程序启动后使用

插入它
db.Cards.insert({ docName: "Hello world!", createdAt: new Date() });

并使用以下命令进行验证

db.Cards.find()

返回

{ "_id" : ObjectId("558b0a1394990bf66c75775d"), "docName" : "Hello world!", "createdAt" : ISODate("2015-06-24T19:50:42.996Z") }

我做错了什么?

【问题讨论】:

  • 您是否设置了 Meteor 用于将数据从服务器发送到客户端的整个 Pub/Sub 机制? docs.meteor.com/#/full/meteor_publish
  • 我在服务器文件夹 Meteor.publish("Cards", function () { return Cards.find({}); }); 中有以下 js 文件设置;
  • 您是否还订阅了“卡片”出版物?
  • 我还使用客户端文件夹 Meteor.subscribe("cards"); 中的 js 文件中的以下代码订阅了这个我还尝试了“卡片”/“卡片”的变体。不工作
  • pub 和 sub 的名称需要匹配。因此,如果您要发布“卡片”,您应该订阅“卡片”。如果仍然无法正常工作,下一步应该是检查客户端控制台以查看 Cards.find().fetch() 是否显示任何内容。还要确认目录结构,以便您从服务器目录发布并从客户端目录订阅

标签: mongodb meteor


【解决方案1】:

错误是 Cards 集合仅在客户端定义。 (在 Meteor.isClient() 代码块下)。

这意味着meteor 试图从服务器读取,找不到项目,因为它没有在服务器端定义,并且失败了。

解决方案是在“both”文件夹中定义它,以便服务器和客户端都可以访问该集合。

http://docs.meteor.com/#/basic/filestructure 

当然,不要忘记发布和订阅集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2013-04-08
    • 2014-04-01
    • 1970-01-01
    相关资源
    最近更新 更多