我有一个简单的模板,该模板显示网站列表和详细信息页面,允许用户发布有关该网站的评论。由于某些原因,当单击浏览器中的“后退”按钮或Iron路由器链接到另一页面时,再次返回时,注释的更新功能将不再起作用。集合已更新,但未呈现到模板。控制台中不会引发任何错误。

我怀疑我的助手有问题,但是我是一个完全菜鸟,并且在经历了短暂的学习后,奋力挣扎了7天以上,以了解流星,蒙哥,做出反应...。

我的代码来更新集合:

Template.website_details_form.events({
    "submit .js-add-comment": function(event) {
        var post, theID;
        post = event.target.post.value;
        theID = this._id;
        console.log("the post:" +post);
        console.log("this is the id: " +theID);

        if(Meteor.user()) {
             var user = Meteor.user().username;
             if (post != ""){
                 Websites.update({_id: theID}, {$addToSet:{comments:{user:user, comment:post}}});
                 $('input#post').removeClass('error');
             } else{
                 $('input#post').addClass('error');
             }
         } else {
             swal("Please sign in to post!", "Oops...", "error");
         }
         event.preventDefault();
     }
});


我的助手无疑是时髦的助手:

var details_ID;
var thecomments;
Template.website_details.helpers({
    sites:function() {
        if(details_ID === undefined) {
            return Websites.find(
                { title: 'Goldsmiths Computing Department' });
        } else {
           return Websites.find({_id:details_ID});
        }
     }
});

Template.website_details_item.helpers({
    comments:function() {
        if(thecomments === undefined) {
            var c = Websites.find({title: 'Goldsmiths Computing Department'}).fetch();
            return c[0].comments;
         } else {
            return thecomments;
         }
     }
});

Template.website_details_form.helpers({
    identify:function(){
    if(details_ID === undefined){
        return Websites.find({
            title: 'Goldsmiths Computing Department' });
        } else {
            return Websites.find({_id:details_ID});
        }
     }
});


我的路由器:

Router.route('/website_details', function () {
    this.render('navBar', {to: 'navbar' });
    this.render('website_details', {to: 'main'});
});


我在文档上使用click函数来获取我在助手中使用的变量的信息.... this._id

我确实看到了另一个问题,该问题在使用后退按钮和铁路线后专门询问了反应性,但是该线程终止于github页面且几乎没有交互,并解决了一个我没有的问题...据我所知...我一个菜鸟...提前谢谢。

最佳答案

查看code,我发现:


Template.website_details_form.events中,Websites集合正在正确更新。


Websites.update({//保存到收藏夹
   _id:theID
},{
   $ addToSet:{
      评论 : {
         用户:用户,
         评论:发布
      }
   }
});



但是,在Template.website_details_item.helpers中,注释数据是从Session而不是Websites集合读取的。


...
评论:function(){
   var post = Session.get('site'); //从会话中读取
   返回post.comments;
},
...


解决此问题的两个建议:


helpers访问数据时,直接从Websites集合中读取数据:


var site_data = Websites.findOne({
   _id:someId
});

if(site_data){//检查comment_data是否未定义
   返回site_data.comment;
}其他{
   返回null;
}



更新Websites集合时,请立即更新Session数据:


Websites.update({//保存到收藏夹
   _id:theID
},{
   $ addToSet:{
      评论 : {
         用户:用户,
         评论:发布
      }
   }
},函数(错误,数据){
      if(!err){
         var site_data = Session.get('site');
         / *修改site_data * /
         Session.set('site',site_data);
      }
});


我建议第一种选择,因为它避免在Session中存储大量数据,并且因为客户端minimongo集合已经存储了相同的数据。

10-06 07:38