通过 Meteor 返回子文档数组 / Mongo
Returning subdocument array through Meteor / Mongo
我在 return 编辑和显示我添加到子文档的标签时遇到了一些问题。我添加标签没问题,但想为每个标签在项目上贴上标签。我根本找不到可以帮助我 return 子文档中数组中项目的资源。我认为这是我被卡住的所有帮助者 - 基本上是语法正确的方式来编写 "Items.(this._id).itemTags.find();" :)
哦 - 我已经删除了很多 HTML 和 JS,但是,是的,其他一切都工作正常。集合为"Items",子文档为"itemTags",插入时设置为"itemTags: []"。在我的测试环境中,我可以添加 "Cats" 和 "Dogs" 作为标签,并且可以通过 "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);
您有发布和订阅设置吗?
server/publications.js
Items = new Mongo.Collection("items");
Meteor.publish("items", function () {
return Items.find({});
});
client/subscriptions.js
Items = new Mongo.Collection("items");
Meteor.subscribe("items");
您唯一的问题是尝试在同一块中迭代游标和子数组。如果您将 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>
但在必要时使用单独的模板在设计和处理事件方面更加灵活。
我在 return 编辑和显示我添加到子文档的标签时遇到了一些问题。我添加标签没问题,但想为每个标签在项目上贴上标签。我根本找不到可以帮助我 return 子文档中数组中项目的资源。我认为这是我被卡住的所有帮助者 - 基本上是语法正确的方式来编写 "Items.(this._id).itemTags.find();" :)
哦 - 我已经删除了很多 HTML 和 JS,但是,是的,其他一切都工作正常。集合为"Items",子文档为"itemTags",插入时设置为"itemTags: []"。在我的测试环境中,我可以添加 "Cats" 和 "Dogs" 作为标签,并且可以通过 "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);
您有发布和订阅设置吗?
server/publications.js
Items = new Mongo.Collection("items");
Meteor.publish("items", function () {
return Items.find({});
});
client/subscriptions.js
Items = new Mongo.Collection("items");
Meteor.subscribe("items");
您唯一的问题是尝试在同一块中迭代游标和子数组。如果您将 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>
但在必要时使用单独的模板在设计和处理事件方面更加灵活。