我有一个简单的模板,该模板显示网站列表和详细信息页面,允许用户发布有关该网站的评论。由于某些原因,当单击浏览器中的“后退”按钮或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集合已经存储了相同的数据。