MeteorJS:如何从集合中加载id

时间:2018-01-05 15:37:24

标签: html meteor

我正在尝试加载一个数组(使用简单的文本)并尝试在模板调用时将其加载到模板上。如何从特定项中获取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中的这个字段......

1 个答案:

答案 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并在助手中找到它。