编辑:可以在评论中找到解决方案
小心:Noob提问。
我有一个名为"公司"的mongo系列。这是一个示例条目:
{
name: 'Company 1',
createdAt: new Date(),
tags: [
{tag: 'tag 1', count: 63},
{tag: 'tag 2', count: 47},
{tag: 'tag 3', count: 13}
]
}
从示例中可以看出,公司的标签保存在一个对象数组中,其中每个标签都有一个count属性,用于记住标签被点击的频率。
现在,我希望在用户点击代码时增加计数。我在事件处理函数中执行此操作。我试图实现这一目标的方式如下:
第1步:我必须找到相关的公司文件。标签是" href元素"在container-div中的list元素内。在该div中,我可以找到公司的名称,因此我使用该名称来获取相关文档:
var companyName = event.target.parentElement.parentElement.children[1].textContent;
var company = Companies.findOne({name: companyName});
到目前为止这是有效的,但我认为这是一个更清洁的解决方案。我特别不喜欢孩子[1]部分。有什么建议吗?
第2步:现在我有了公司,我想增加点击的标签。这有点令人讨厌,因为我需要选择要更新的数组的正确元素。我有要更新的标签文本(来自event.target.text),但如何从tags-array中选择正确的对象?我认为它与位置$运算符有关,但我还不明白。
Companies.update({_id: company._id, }, /* MAGIC HAPPENS HERE */);
这是html:
<head>
<title>App</title>
</head>
<body>
<div class="container">
{{> company}}
</div>
</body>
<template name="company">
<h2>{{name}}</h2>
{{#each tags}}
{{> tag}}
{{/each}}
</template>
<template name="tag">
<li><a href="">{{tag}}</a> - {{count}}</li>
</template>
答案 0 :(得分:2)
在html中为每个标记添加一个唯一ID,以便id显示公司名称和标记名称。
您的标记名称中不应包含空格,将其称为Tag1,Tag2,而不是标记1,标记2.对于公司名称,空格始终存在问题。将'Company_Name'与下划线一起使用,如果需要,可以在以后删除。
因此每个标记应该具有如下所示的唯一ID:
<a href="" id="Company_Name.tag1">{{tag}}</a>
然后,您可以从事件中获取所点击链接的ID,并在点上拆分ID以显示公司名称和标签名称。
然后更新计数:
Company.update({"name" : "Company 1", 'tags.tag': 'tag 1'}, {$inc: {'tags.$.count': 1}});
如果Meteor不允许你这样做,那么你要么: 将_id字段放在html中而不是公司名称
或: 1)您使用公司名称查找记录 2)从记录中获取_id 3)然后使用_id而不是'name'字段更新计数
答案 1 :(得分:1)
要更新标签计数,这样的事情应该有效:
Company.update({_id: company._id, tags.tag: tagName}, {$inc: {tags.$.count: 1}});
通常,尝试使用现有的包。请查看tags packages,主要是patrickleet:tags
并使用autoform
标记。否则,您就在正确的轨道上embedding tags。