我在返回和显示要添加到子文档中的标签时遇到了一些麻烦。 我没有添加标签的问题,但是想要为每个标签在标签上贴上标签。 我根本找不到能够帮助我在子文档中的数组中返回项目的资源。 我认为这是我所困的所有助手-基本上是语法上正确的编写“ Items。(this._id).itemTags.find();”的方法。 :)

哦-我已经删掉了很多HTML和JS,但是,是的,其他所有东西都工作正常。 集合为“项目”,子文档为“ itemTags”,在插入过程中设置为“ itemTags:[]”。 在测试环境中,我可以添加“猫”和“狗”作为标签,并可以通过“ Items.find()。fetch();”检查对象来验证其是否有效。 但正在努力展示它们。

HTML:

<template name="item">
  {{#each itemTags}}
    <span class="label label-default">{{itemTag}}</span>
  {{/each}}
</template>

JS:

Template.item.helpers({
   itemTags: function() {
    var currentUserId = Meteor.userId();
    return Items.find(); // yes, this line is completely wrong, but I'm lost hehe
  }
});

Template.item.events({
  'submit .add-tag': function(event) {
    event.preventDefault();

    var itemTag = event.target.text.value;

    Items.update(this._id, {$push: {itemTags: itemTag}});

    event.target.text.value = "";

    return false;
  }
});

数据库模式(如我的插入命令所示):

var item = {
  itemText: $(e.target).find('[name=itemText]').val(),
  createdAt: new Date(),
  createdBy: currentUserId,
  hard: false,
  difficulty: 'easy',
  checked: false,
  itemTags: [],
};

item._id = Items.insert(item);

#1楼 票数:2 已采纳

您唯一的问题是尝试迭代同一块中的游标和子数组。 如果将items模板和单个item模板分开,则会得到所需的结果。

为了简化起见,我将您的代码更改为如下所示:

这是您的主体:

<body>
    {{> items}}
</body>

<template name="items">
  {{#each items}}
    {{> item}}
  {{/each}}
</template>

<template name="item">
  <h2>{{itemText}} tags are:</h2>
  <ul>
  {{#each itemTags}}
    <li>{{this}}</li>
  {{/each}}
  </ul>
</template>

这是您的帮手:

Template.items.helpers({
  items: function () {
    return Items.find();
  }
})

假设项目文档如下所示:

{ 
  itemText: String,
  itemTags: Array
}

我已经在Meteorpad上创建了一个应用,供您玩:

http://meteorpad.com/pad/BmRQ5fkwWEMBKszJW/SO-27951102

您可以在此处进一步更改代码并实时查看更改。 它基本上是流星的jsfiddle。

编辑:受@ chip-castle的评论启发,您实际上可以使用一个嵌套了each块的模板:

<template name="items">
  {{#each items}}
    <h2>{{itemText}} tags are:</h2>
    <ul>
    {{#each itemTags}}
      <li>{{this}}</li>
    {{/each}}
    </ul>
  {{/each}}
</template>

但是在必要时在设计和处理事件时使用单独的模板更为灵活。

#2楼 票数:0

您有发布和订阅设置吗?

服务器/ publications.js

Items = new Mongo.Collection("items");

Meteor.publish("items", function () {
  return Items.find({});
});

客户机/ subscriptions.js

Items = new Mongo.Collection("items");

Meteor.subscribe("items");

  ask by Erik Johnson translate from so

未解决问题?本站智能推荐:

2回复

流星/Mongodb-数组,子文档和重叠订阅

我在做游戏; 玩家组成联赛并做出相互竞争的预测。 一个联赛看起来像这样: { leagueName: "Premier League", players:[ {name: "Goodie", secretPrediction: "abc"}, {name:
1回复

从模板助手流星/mongodb访问minimongo

我正在尝试在HTML页面的Minimongo中访问我的产品集合。 当我在浏览器控制台中时,可以键入Products.findOne(); 它将退货。 但是,当我尝试从模板帮助器退回产品时,却无法定义。 有人在想吗?
1回复

什么是minimongo(流星)限制?cursor.toArray()在客户端失败

昨天我试图在Meteor中使用获得一系列查询结果 (见http://docs.mongodb.org/manual/reference/method/cursor.toArray/ ) 我无法让它发挥作用。 最后我在Meteor mongo控制台上尝试了它,它工作正常。 我是流星新
1回复

使用动态变量访问流星中另一个变量的值?

因此,为了理智起见,我正在尝试使我的代码更具模块化(并且因为它似乎比用五种以上不同方式编写相同的代码更有效)。 但是,由于我的JavaScript知识显然缺乏,因此我在这方面遇到了困难。 我有一个用于购买各种单位类型的方法调用。 我要检查这名球员有足够的特定类型单位的citizens或s
1回复

添加文档后,立即删除文档

这是我的简单模板: 在我的groupChat.html和groupChat.js文件中: 当我提交新消息时,我可以看到它是使用Mongol添加的(视觉上是一瞬间),但此后立即将其删除。 任何想法为什么会这样?
1回复

Meteorjs,如何获得更新整个客户端文档的副作用

我有一个从客户端调用的Meteor方法,该方法又更新了单个文档中的所有字段。 在下面的代码的最后一行中,我尝试立即在客户端上运行相同的更新以获取直接的副作用(假定更新将通过)。 问题是我得到了: 更新失败:访问被拒绝。 在受限集合中,您只能更新文档,而不能替换它们。 使用Mongo
1回复

流星的Minimongo中有$运算符替代吗?

我正在尝试在客户端的Meteor集合中查询数组中的特定元素,但是Minimongo不支持$运算符。 是否有其他方法可以过滤查询,使其仅返回数组中的特定元素? 我的收藏的结构如下: 我正在尝试编写一个查询,该查询仅返回ID为“ foo”的数组中的对象。 在Mongo中,该查询将是这样的
1回复

嵌套数组的排序不会导致顺序更改

我有一个具有以下结构的集合: 我想以适当的注释顺序显示此信息。 在我的情况下,这意味着最新的评论优先。 我尝试使用: 和: 但顺序保持不变-最早的评论在前。 知道我缺少什么吗?