我正在尝试加载一个数组(使用简单的文本)并尝试在模板调用时将其加载到模板上。如何从特定项中获取ID以获取我存储在其中的数组?
HTML模板:
<template name="commentMarker">
<div id="viewMarker">
<h3 id="markerTitle">{{markerName}}</h3>
<h6 id="markerCategory">{{markerCategory}}</h6>
<br>
<fieldset>
<legend>Description</legend>
<p>{{markerDescription}}</p>
</fieldset>
<form id="commentForm">
<fieldset>
<legend>Comments</legend>
<input type="text" id="markerId" name="idForComment" value={{markerId}}>
<textarea rows="3" cols="19" name="comment" id="commentArea" placeholder="Insert your comment here..."></textarea>
{{#each comments}}
<p id="oneComment">{{this}}</p>
{{/each}}
</fieldset>
<input type="submit" value="Comment" class="commentButton">
<input type="submit" value="Close" class="exitButton">
</form>
</div>
</template>
JS:
Template.commentMarker.helpers({
comments(){
alert(template.find("#markerId").value);
if(commentArray.length===0) return;
else return commentArray;
}});
这是我将评论插入集合项目并且工作正常的地方
Template.commentMarker.events({
'click .commentButton': function(e, template){
e.preventDefault();
var id = template.find("#markerId").value;
var comment = template.find("#commentArea").value;
Points.update(id, { $push: { comments: comment }});
commentArray = Points.findOne(id).comments;
template.find("#commentArea").value = ' ';
}
我尝试使用commentArray
作为全局变量。但我不知道如何从特定项目中获取Id,我甚至将其ID(隐藏显示)放在表单中以实际能够插入注释。但它没有帮助我显示评论,因为我似乎无法进入Template.helpers中的这个字段......
答案 0 :(得分:0)
不完全确定你要做什么。它几乎就像您在更新到集合后立即显示注释一样。看起来你完全是在本地而不是在线收藏。
但是,将其存储为会话将起作用...或反应性变量。可能不是最好的解决方案。基本上将commentArray = Points.findOne(id).comments;
替换为:
Session.set('comments', Points.findOne(id).comments)
然后在帮助者中解决它:
let commentArray = Session.get('comments')
对敏感数据一直使用它是不安全的。另外尝试捕获findOne(id).comments,因为如果碰巧找不到它会产生错误。
注意:如果您要使用Meteor.Methods,则无法使用Session。你必须返回id并在助手中找到它。