我在返回并显示我添加到子文档中的标记时遇到了一些麻烦。添加标签没有问题,但是想在每个标签的项目上添加标签。我根本无法找到一个资源来帮助我返回子文档中数组中的项目。我认为这是我所困的所有助手 - 基本上是语法正确的写作方式" Items。(this._id).itemTags.find();" :)
哦 - 我已经删除了很多HTML和JS,但是,是的,其他一切都运行良好。该系列是" Items"子文档是" itemTags",设置为" itemTags:[]"在插入期间。在我的测试环境中,我可以添加" Cats"和#34;狗"作为标签,可以通过" 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;
}
});
数据库架构(如我的insert命令所示):
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);
答案 0 :(得分: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>
但在必要时,使用单独的模板在设计和处理事件中更加灵活。
答案 1 :(得分: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");