流星评论-ui:评论出现然后立即消失

时间:2015-12-04 09:07:34

标签: javascript meteor

我对Meteor很陌生,我正在与arkham斗争:comments-ui。

这里简要介绍了我正在做的事情。我希望它不太详细。

  1. 我订阅了一个名为' articles'的已发布集合。

    Articles = new Mongo.Collection("articles");
    
  2. 我正在通过此负载迭代,通过名为' articlepreview'的模板显示客户端中每篇文章的预览。

        Template.body.helpers({
            articles: function(){
                return Articles.find({}, {sort: {createdAt: -1}});
            }
        });
    
  3. 我已将每篇文章的唯一ID添加到“更多”的自定义属性(数据ID)中。每个预览底部的按钮。

    <template name="articlepreview">
         <h2>{{head}}</h2>
         <p>{{{summary}}}</p>
         <p class="readmore" data-id="{{_id}}">Read more</p>
    </template>
    
  4. 我已为此按钮添加了一个事件监听器,该监听器获取自定义属性并调用一个函数来显示已单击的完整文章以及设置具有唯一ID的Session变量。

            "click .readmore": function (event) {
                event.preventDefault();
                var articleID = event.target.getAttribute("data-id");
                Session.set('articleUID',articleID);
                Meteor.call("loadArticle", articleID);
            }
    
    1. 此功能会填充名为&#39; articlefull&#39;的模板。通过帮助者;基本上我使用Session.set来设置一个包含完整文章文本的变量,方法是使用带有已设置的唯一ID的findOne。
  5. HELPER:

            Template.articlefull.helpers({
                articlebody: function () {
                    return Session.get('articlebody');
                },
                uniqueid: function(){
                    return Session.get('articleUID');
                }
            });
    

    TEMPLATE:

        <template name="articlefull">
            <div id="article">
                <p>{{{articlebody}}}</p>
            </div>
            <div id="comments" class="comment-section">
                {{> commentsBox id=uniqueid}}
            </div>
        </template>
    
    1. 此模板的一部分是评论框。我设置了评论框的ID以匹配所加载文章的ID,但此时发生了一些奇怪的事情:评论框允许我输入评论并点击“添加”,但是一旦我这样做,评论会在屏幕上短暂闪烁然后消失。
    2. 对我做错了什么的任何想法?如果我将{{uniqueid}}弹出到评论框正下方的模板中,它会显示正确的值,这意味着它会被拉过来,但是仍然存在问题......

      PS:请告诉我,如果我以完全错误的方式解决这个问题。我确信有一种更简单的方法可以做我想做的事情,但正如我所说的,我对此很陌生。谢谢!

1 个答案:

答案 0 :(得分:1)

根据您对实施的详细说明,我认为由于Comments集合缺少发布和订阅功能而导致出现此问题。

根据您的使用情况,您需要添加 Meteor.publish(name, func) Meteor.subscribe(name, [arg1, arg2...], [callbacks]) 功能。

Meteor.publish('allComments', function() {
  return Comments.getAll();
});

Meteor.publish('articleComments', function(docId) {
  return Comments.get(docId);
});
Meteor.subscribe('allComments');

Meteor.subscribe('articleComments', Session.get('articleUID'));