【问题标题】:meteor comments-ui: comments appear then immediately disappear流星评论-ui:评论出现然后立即消失
【发布时间】:2015-12-08 03:28:17
【问题描述】:

我对 Meteor 还很陌生,我正在努力使用 arkham:cmets-ui。

以下是我正在做的事情的简要概述。希望不要太详细。

  1. 我订阅了一个名为“文章”的已发布集合。

    Articles = new Mongo.Collection("articles");
    
  2. 我在加载时迭代此内容,以通过名为“articlepreview”的模板在客户端显示每篇文章的预览。

        Template.body.helpers({
            articles: function(){
                return Articles.find({}, {sort: {createdAt: -1}});
            }
        });
    
  3. 我已将每篇文章的唯一 ID 添加到每个预览底部的“阅读更多”按钮的自定义属性 (data-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. 此函数通过帮助程序填充名为“articlefull”的模板;本质上,我使用 Session.set 来设置一个包含整篇文章文本的变量,方法是使用 findOne 和已设置的唯一 ID。

助手:

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

模板:

    <template name="articlefull">
        <div id="article">
            <p>{{{articlebody}}}</p>
        </div>
        <div id="comments" class="comment-section">
            {{> commentsBox id=uniqueid}}
        </div>
    </template>
  1. 此模板的一部分是注释框。我正在设置评论框的 ID 以匹配加载的文章的 ID,但此时发生了一些非常奇怪的事情:cmets 框允许我输入评论并单击“添加”,但一旦我这样做,评论会短暂闪烁在屏幕上,然后消失。

对我做错了什么有什么想法吗?如果我将 {{uniqueid}} 弹出到评论框下方的模板中,它会显示正确的值,这意味着它正在通过,但仍然有问题......

PS:如果我以完全错误的方式处理这件事,请告诉我。我确信有一种更简单的方法可以做我想做的事情,但正如我所说,我对此并不陌生。谢谢!

【问题讨论】:

    标签: javascript meteor


    【解决方案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'));
    

    【讨论】:

      猜你喜欢
      • 2013-03-22
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 2020-01-20
      • 2011-07-28
      • 1970-01-01
      相关资源
      最近更新 更多